【问题标题】:Handeling Node, Express background errors处理 Node、Express 后台错误
【发布时间】:2015-06-29 21:10:41
【问题描述】:

我很不确定应该如何正确处理我的 node.js/express 应用程序中发生的未捕获异常。现在我有一个 Express 应用程序,它将所有捕获的错误发送到 Express 错误处理程序 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 但是我真的不知道如何为后台任务实现这些。

【问题讨论】:

  • 为什么不尝试找出您尚未发现的错误,并为这些错误添加适当的错误处理?此外,究竟是什么阻止您从 uncaughtException 处理程序向外部服务发送错误报告?
  • 这是我自己的问题,只是泛泛而谈。信息已过时且重复。

标签: javascript node.js express error-handling


【解决方案1】:

我使用process.on(uncaughtException),因为您真正想做的只是捕获错误的输出并正常关闭服务器(然后重新启动)。我认为没有任何理由做比这更复杂的事情,因为从本质上讲,除了关闭之外,您不希望您的应用程序在该状态下做任何其他事情other

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-27
  • 2012-05-24
  • 1970-01-01
  • 2016-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多