1

我正在使用 NodeJS 和 Express 构建一个应用程序,并且最近将错误处理与 Raygun 结合在一起。

Raygun 提供了一个专门用于 Express 的错误处理程序,但它必须是最后运行的中间件。现在我有:

//Log the domain id, req, and error to the console
app.use(function errorHandler(err, req, res, next) {
  console.log('error on request %d %s %s: %s', process.domain.id, req.method, req.url, err)
  next(err)
})
//Log the error to Raygun
//!Must be last piece of middleware to be defined
app.use(raygunClient.expressHandler);

但问题是服务器继续运行,可能会使应用程序处于未知状态。我想做一个优雅的服务器关闭,但如果我添加

//Shuts down the process
app.use(function errorHandler(err, req, res, next) {
  process.exit()
})

然后 Raygun 的快速处理程序不起作用。

做什么?

4

1 回答 1

2

您可以定义自定义raygunClient.expressHandler,就像在中定义的那样。

app.use(function errorHandler(err, req, res, next) {
  console.log('error on request %d %s %s: %s', process.domain.id, req.method, req.url, err)
  next(err)
}) 

app.use(function (err, req, res, next) {
  raygunClient.send(err, {}, function (response) {
    //all done
    process.exit(1);
  }, req);
  next(err);
});

现在,您还可以customData作为第二个参数和tags第五个参数发送,这在默认错误处理程序中是不可能的。

于 2015-07-12T20:01:37.147 回答