![](/img/trans.png)
[英]RestFul API with express and node.js crashed everytime how to fix that?
[英]Why my RestFul API with express and nodejs crashed everyday?
我有带有 express 和 nodejs 的宁静 api,但是这个 api 每次都崩溃了。 所以..我有一个数据时间功能。 此函数将每次将 url 地址中的日期替换为当前日期时间.. 我不确定但可能是当当前日期与新的当前日期更改时 API 崩溃了..
我在控制台上看到此错误消息:
events.js:187
throw er; // Unhandled 'error' event
^
Error: read ECONNRESET
at TCP.onStreamRead (internal/stream_base_commons.js:201:27)
Emitted 'error' event on Connection instance at:
at Connection._handleProtocolError (C:\Users\Admin\Desktop\node-express\node_modules\mysql\lib\Connection.js:426:8)
at Protocol.emit (events.js:210:5)
at Protocol._delegateError (C:\Users\Admin\Desktop\node-express\node_modules\mysql\lib\protocol\Protocol.js:398:10)
at Protocol.handleNetworkError (C:\Users\Admin\Desktop\node-express\node_modules\mysql\lib\protocol\Protocol.js:371:10)
at Connection._handleNetworkError (C:\Users\Admin\Desktop\node-express\node_modules\mysql\lib\Connection.js:421:18)
at Socket.emit (events.js:210:5)
at emitErrorNT (internal/streams/destroy.js:92:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
at processTicksAndRejections (internal/process/task_queues.js:80:21) {
errno: 'ECONNRESET',
code: 'ECONNRESET',
syscall: 'read',
fatal: true
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! express-api@1.0.0 start: `node server.js`
npm ERR!
npm ERR! Failed at the express-api@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\Admin\AppData\Roaming\npm-cache\_logs\2019-12-29T04_48_17_190Z-debug.log
所以这是api的代码..它非常简单..但我不知道如何修复这个错误。 当我醒来并尝试在每次 API 崩溃时查看来自 API 的数据时。
这是来自api的代码:
// Create express app
var express = require("express")
var app = express()
var mysql = require('mysql')
var express = require("express")
var cors = require('cors')
app.use(cors())
// Server port
var HTTP_PORT = 8000
// Start server
app.listen(HTTP_PORT, () => {
console.log("Server running on port %PORT%".replace("%PORT%", HTTP_PORT))
});
var con = mysql.createConnection({
host: "192.168.0.1",
port: "1234",
user: "username",
password: "password"
});
let aladinModel = '';
let aladinModelStations = '';
function formatDate(date) {
var d = new Date(date),
month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();
if (month.length < 2)
month = '0' + month;
if (day.length < 2)
day = '0' + day;
return [year, month, day].join('-');
}
var dateNow = formatDate(Date());
app.route('/')
.get(function (req, res) {
// omitted
res.setHeader('Access-Control-Allow-Origin', '*', 'Cache-Control', 'private, no-cache, no-store, must-revalidate');
const date = req.query.date;
const id = req.query.id;
const daysForward = req.query.daysForward;
try {
const query = `CALL aladin_surfex.Get_mod_cell_values_meteogram_cell('${dateNow}', ${id}, ${daysForward})`;
con.query(query, function (err, result, fields) {
if (err) throw err;
aladinModel = result;
});
res.json({ aladinModel })
} catch (error) {
console.log("Error query database!!!");
}
});
app.route('/stations')
.get(function (req, res) {
// omitted
res.setHeader('Access-Control-Allow-Origin', '*');
try {
const query2 = `SELECT Station,Ime FROM aladin_surfex.stations_cells;`;
con.query(query2, function (err, result2, fields) {
if (err) throw err;
aladinModelStations = result2;
});
res.json({ aladinModelStations })
} catch (error) {
console.log("Error query database!!!");
}
});
app.use(function (req, res) {
res.status(404);
});
我尝试删除现金,更新 npm,重新启动计算机。 但没有结果。 与 nodemon 崩溃相同.. 我能做什么? 如何解决?
该错误似乎与与 mysql 的连接有关。
作为 mysqljs 文档( https://github.com/mysqljs/mysql#error-handling ):
注意:'error' 事件在 node.js 中是特殊的。 如果它们在没有附加侦听器的情况下发生,则会打印堆栈跟踪并终止您的进程。
您应该像这样拦截连接错误:
connection.on('error', function(err) {
console.log(err.code); // 'ER_BAD_DB_ERROR'
});
因此您可以调查错误发生的时间和原因,最终您可以在出现问题时重新创建连接。
在声明所有路由并连接到数据库后,将app.listen
移至文件底部。
使用app.get('route', function...)
(更多关于Express 文档)
将res.json()
移动到每个数据库查询的回调函数中。 结果将异步返回,因此无法在函数外部访问。 如果您不熟悉 Javascript 中的异步和回调,我建议您使用谷歌搜索它们,您会发现大量阅读材料。
初始化您的变量,例如const aladinModel = ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.