Лучший способ справиться с исключениями в глобальном масштабе в Node.js с помощью Express 4?
AS У нас есть фильтр исключений в asp.net MVC, есть ли у нас аналогичная функция в node.js с выражением 4?
Я пробовал следующие статьи, но не нашел желаемого решения.
http://www.nodewiz.biz/nodejs-error-handling-pattern/
Я также пробовал ниже на app.js
process.on('uncaughtException', function (err) {
console.log(err);
})
ref article: http://shapeshed.com/uncaught-exceptions-in-node/
Любая помощь будет заметна.
Ответы
Ответ 1
Ошибки могут возникать и попадаться в разных местах, поэтому рекомендуется обрабатывать ошибки в централизованном объекте, который обрабатывает все типы ошибок. Например, ошибка может возникать в следующих местах:
1.Express промежуточное ПО в случае ошибки SYNC в веб-запросе
app.use(function (err, req, res, next) {
//call handler here
});
Работы 2.CRON (запланированные задачи)
Скрипт инициализации 3.Your
4. Тест-код
5.Убедитесь в ошибке
process.on('uncaughtException', function(error) {
errorManagement.handler.handleError(error);
if(!errorManagement.handler.isTrustedError(error))
process.exit(1)
});
6. Отклонение обещания
process.on('unhandledRejection', function(reason, p){
//call handler here
});
Затем, когда вы обнаруживаете ошибки, передайте их централизованному обработчику ошибок:
module.exports.handler = new errorHandler();
function errorHandler(){
this.handleError = function (error) {
return logger.logError(err).then(sendMailToAdminIfCritical).then(saveInOpsQueueIfCritical).then(determineIfOperationalError);
}
Для получения дополнительной информации читайте "bullet 4" здесь (+ другие рекомендации и более 35 цитат и примеры кода)
Ответ 2
В экспрессе стандартная практика заключается в том, чтобы привязать всех обработчиков ошибок. Обработчик ошибок в barebones будет выглядеть так:
// Handle errors
app.use((err, req, res, next) => {
if (! err) {
return next();
}
res.status(500);
res.send('500: Internal server error');
});
Наряду с этим вам нужно будет ловить ошибки везде, где они могут произойти, и передать их в качестве параметра в next()
. Это позволит убедиться, что захват всех обработчиков ловит ошибки.
Ответ 3
Напишите промежуточное программное обеспечение для обработки, как показано ниже для всех маршрутов в экспресс-js
function asyncTryCatchMiddleware(hadnler){
return async(req,res,next) => {
try{
await handler(req,res);
} catch(e) {
next(e)
}
};
}
Вы можете использовать промежуточное программное обеспечение следующим образом:
router.get('/testapi',asyncTryCatchMiddleware(async (req,res)=>{
res.send();
}));
Ответ 4
Добавление глобальных обработчиков исключений в узел - это события процесса. Используйте process.on
чтобы поймать их.
process.on('uncaughtException', (err) => {
console.log('whoops! there was an error');
});