当NodeJS应用程序发生错误时,如果发生异常,服务器可能会崩溃并停止。
如何防止出现这种情况,以便服务器在出错时永远不会停止,而是返回错误代码?
- 修改
这是导致服务器崩溃的方法(表foo不存在):
app.get('/articles/list', function(req, res) {
connection.query('select * from foo', function(err, rows, fields) {
if (err) throw err;
res.send(JSON.stringify(rows));
});
});
- 最佳解决方案 最后,我找到了最适合我的解决方案: http://rowanmanning.com/posts/node-cluster-and-express/
总之,它包括使用服务器集群,并在退出时重新启动服务器
答案 0 :(得分:2)
如果您使用的是express
,则可以使用此
function clientErrorHandler (err, req, res, next) {
if (req.xhr) {
res.status(500).send({ error: 'Something failed!' })
} else {
next(err)
}
}
app.use(clientErrorHandler);
我建议你准备好这个article,它会为你澄清很多。
JFK,一旦你有try-catch
包含的异步内容,请注意异步错误捕获,最常见的错误。
另外,请避免使用
process.on("uncaughException", () => {....})
这非常糟糕,因为当抛出未捕获的异常时,您无法在此时可靠地继续您的程序。让它失败并使用daemonizer's
pm2
重新启动,forever
,for (key, value) in dictionary {
dictionary.updateValue(value + [nameText], forKey: key)
}
等等。
答案 1 :(得分:1)
作为一般规则,您应该处理所有错误并承诺代码中的拒绝,以避免未被捕获的异常。
对于错误:使用try-catch声明
承诺:使用.catch方法
Btw Node允许您拦截uncaughtExceptions
或unhandledRejection
事件,但这不是处理此级别错误并阻止程序退出的好方法,因为它会产生不可预测的行为。
答案 2 :(得分:-1)
使用try catch ...代码部分,抛出异常
try{
//youre code here
}catch(error){
console.log(error)
}