Предположим, у меня есть такой маршрут:
app.get('/broken', (req, res) => {
throw new Error('Broken!');
});
Это никогда не отправит ответ клиентам.
Однако я могу добавить промежуточное ПО для всех ошибок:
const errorMiddleware = (error, req, res, next) => {
if (error) {
console.error(error);
return res.status(500)
.json({
message: 'Internal server error',
});
}
next(error);
};
Но это не будет работать для async
маршрутов, потому что они не throw
напрямую.
Например, это не будет работать:
app.get('/broken', async (req, res) => {
throw new Error('Broken!');
});
Так что я могу создать обертку так:
const asyncRoute = f => (req, res, next) => {
return Promise.resolve(f(req, res, next)).catch(next);
};
app.get('/broken', asyncRoute(async (req, res) => {
throw new Error('Broken!');
}));
Но это настоящая боль, потому что теперь я должен вызывать эту функцию для каждого маршрута!
Как лучше справиться с этим?