API только , который Express предоставляет для передачи ошибок вниз по цепочке обработчиков, осуществляется через функцию next()
. Вам нужно обернуть его вокруг чего-то, что будет делать try / catch и вызывать next()
за вас:
function asyncHandler (f) {
return function (req, res, next) {
f(req, res, next).catch(next)
}
}
Теперь вы можете сделать:
tenantsRouter.get('/my_endpoint', asyncHandler(async function(req, res, next) {
var result = await methodThatCouldFail()
res.status(HttpStatus.OK).json({result);
}));
Что будет работать именно так вы ожидали, что это сработает.
На самом деле существует несколько реализаций этого простого модуля на npm, если вам не хочется писать его самостоятельно, включая эту: https://www.npmjs.com/package/express-async-handler