Handeling Node,Express背景错误

时间:2015-06-29 21:10:41

标签: javascript node.js express error-handling

我不确定如何正确处理我的node.js / express app中发生的未捕获异常。现在我有一个Express应用程序会将所有捕获的错误发送给Express错误handeler using next(err)

function(err, req, res, next) {
   // Do something with the error
}

这似乎对我有anticipated的错误很好。例如,数据库连接不起作用,基本上所有会返回callback(err)的东西。当我想要执行后台任务时会发生思考问题,后台任务将在发送响应后完成。例如:

app.get('/url', function(req, res) {
   BackgroundTask.run() // Here an uncaught exception occurs, for instance a bug
   res.send('Running your background task')
}

我要运行的后台模块不是表达相关的(不使用req,res),并且在捕获到的错误时,他们将使用errorHandeler中的自定义将错误发送给某些人错误报告服务。但是,当在其中一个后台任务中发生未捕获的异常时,我不知道如何将错误发送到我的错误报告服务(在本例中为Raygun)。似乎唯一有用的是添加process.on('uncaughtException')事件监听器。然而,几乎每个关于该主题的帖子都将后者描述为“糟糕”或粗暴的做事方式。他们似乎建议使用节点domains,但我真的不知道如何为后台任务实现这些。

1 个答案:

答案 0 :(得分:0)

我使用process.on(uncaughtException),因为您真正想要做的就是捕获错误的输出并正常关闭服务器(然后重新启动)。我认为没有理由做任何比这更复杂的事情,因为根据异常的性质,您不希望您的应用程序在该状态其他中执行除关闭之外的任何其他操作。

处理此问题的另一种方法,但它不一定比使用进程处理程序更好,因为您正在有效地编写自定义逻辑来处理您没有预料到的事情。它确实为您的错误处理程序为不同的错误类型提供的 what 提供了更精细的粒度,但最终您仍然可能在处理它之后将应用程序运行在未知状态。我宁愿让我的应用程序记录异常,关闭,然后我将修复错误,以便它再也不会发生,而不是冒着我的用户在域解决方案上的数据,这可能会或可能没有正确处理错误,具体取决于关于它遇到的错误的细微差别。