Как отловить асин c ошибки в nodejs Express вне контекста запроса? - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть простой express сервер, на котором запрос POST запускает длительное задание и возвращает идентификатор задания. Сервер контролирует состояние задания, и клиент может со временем запросить состояние задания. Я делаю это с child_process.spawn и получаю обратные вызовы для обычных событий child_process.

Иногда во время выполнения задания возникает исключение, спустя долгое время после первоначального запроса «start job». Это вызывает мою ошибку обратного вызова, но что тогда? Я не могу выбросить там ApiError, потому что express не справится с этим - я получу UnhandledPromiseRejectionWarning (который в будущей версии node.js завершит процесс).

Есть ли способ установить "глобальный обработчик ошибок" для express, который бы использовал попытку / перехват всего сервера?

Простой пример будет выглядеть примерно так:

app.post('/testing', (req, res) => {
  setTimeout(() => { raise new ApiError('oops!') }, 1000)
})

1 Ответ

1 голос
/ 11 февраля 2020

прямо из express документов ,

" Вы должны перехватить ошибки, возникающие в асинхронном коде, вызванном обработчиками маршрутов или промежуточным программным обеспечением, и передать их Express для обработки . Например:"

app.get('/testing', function (req, res, next) {
  setTimeout(function () {
    try {
      throw new Error('BROKEN')
    } catch (err) {
      next(err)
    }
  }, 100)
})
...