我的问题是,如果我收到服务器错误,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!');
});
答案 0 :(得分:0)
当您从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());
}
});
});