Как мне закрыть мой процесс после использования экспресс-обработчика Raygun?

Я создаю приложение с 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 не работает.

Что?

1 ответ

Решение

Вы можете определить пользовательские 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 как 5-й аргумент, который был невозможен с обработчиком ошибок по умолчанию.

Другие вопросы по тегам