NodeJS:防止应用程序在出错时崩溃

时间:2016-12-15 14:39:04

标签: node.js error-handling

当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/

总之,它包括使用服务器集群,并在退出时重新启动服务器

3 个答案:

答案 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重新启动,foreverfor (key, value) in dictionary { dictionary.updateValue(value + [nameText], forKey: key) } 等等。

答案 1 :(得分:1)

作为一般规则,您应该处理所有错误并承诺代码中的拒绝,以避免未被捕获的异常。

对于错误:使用try-catch声明

承诺:使用.catch方法

Btw Node允许您拦截uncaughtExceptionsunhandledRejection事件,但这不是处理此级别错误并阻止程序退出的好方法,因为它会产生不可预测的行为。

答案 2 :(得分:-1)

使用try catch ...代码部分,抛出异常

 try{
       //youre code here
    }catch(error){
       console.log(error)
    }