我的问题是,如果出现服务器错误,Express-Server 就会关闭。例如,如果 Express 无法连接到数据库,我会收到错误消息:
Error: connect ECONNREFUSED 127.0.0.1:3306 (..)
然后服务器不再运行。我尝试用 this guide 处理我的服务器错误正如您在我的代码片段中看到的。我希望服务器即使在抛出错误时也能继续。
const express = require('express');
const methodOverride = require('method-override');
const app = express();
const mysql = require('mysql');
const connection = mysql.createConnection({
host : 'localhost',
user : 'XXX',
password : 'XXX'
});
app.use(methodOverride());
app.use(function(err, req, res, next) {
res.status(500);
// res.render('error', { error: err });
res.status(500).send('Something broke!');
});
/*Webservices: */
app.get('/', function (req, res) {
res.send('Hello World!');
});
app.get('/database', function (req, res) {
connection.query('SELECT 2 AS solution', function (err, rows, fields) {
if (err) throw err;
console.log('The solution is: ', rows[0].solution);
res.send(rows[0].solution.toString());
});
});
/*Start Server: */
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
最佳答案
当您从 connection.query()
中收到错误时,您将抛出一个未处理的异常。保持服务器运行的关键是适当处理可能发生的所有错误,并确保在出现该错误时发生(对您的服务器而言)安全的事情。
在这种情况下,由于这是在异步回调内部,因此您可以安全处理该错误的唯一位置是在该回调本身内部。您不能抛出异常并从普通的异步回调中在更高级别捕获它。
所以,我建议这样:
app.get('/database', function (req, res) {
connection.query('SELECT 2 AS solution', function (err, rows, fields) {
if (err) {
res.status(501).send("database query error");
} else {
console.log('The solution is: ', rows[0].solution);
res.send(rows[0].solution.toString());
}
});
});
关于javascript - Express:内部服务器错误导致服务器停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42541336/