如何使用Winston在不终止的情况下处理Node.js的uncaughtException和unhandledRejection

时间:2019-01-21 21:38:11

标签: node.js express winston

我试图找到一种方法来捕获项目中的所有错误,并将它们保存到数据库以及文件日志中。我创建了以下中间件,可以帮助我满足这一需求,但是使用Winston面临的唯一问题是,一旦处理了uncaughtException或unhandledRejection,应用程序就会终止。温斯顿有没有办法避免这种终止。我只想保存它们,以后再删除。

const winston = require('winston'); 

require('winston-mongodb');

module.exports = function () {
process.on('unhandledRejection', (ex) => {
    //console.error('error', ex);
    throw ex; //Find better way
});//Catching uncaught exceptions with winston. We are using both file and db.
winston.exceptions.handle([
        new winston.transports.MongoDB({
            db: 'mongodb://localhost/web_logs',
            collection: 'exceptions',
            level: 'error'
        }),
        new winston.transports.Console,
        new winston.transports.File({filename: 'web-exceptions.log'})
    ]
);};

用于快速路线之后,

require('./middleware/exception-handler')();

它可以按预期运行,但会终止该应用程序。如何避免呢?

1 个答案:

答案 0 :(得分:0)

是否有一个expressjs错误处理中间件功能? //在您的index.js或app.js文件中类似

`app.use(function (err, req, res, next) {
   console.error(err.stack)
   res.status(500).send('Something broke!')
 });`

winstonjs记录错误,但未捕获到错误,因此它将使您的应用程序崩溃