Лучший способ справиться с исключениями в глобальном масштабе в 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');
});