有没有办法在NodeJS中获取所有流程事件?

时间:2019-02-26 06:52:10

标签: node.js express events

例如,而不是听下面的特定错误:

process.on('unhandledRejection', r => {
    console.error('tracing unhandledRejection: ');
    console.error(r.response);
});

我想获取所有流程事件,并仅通过配置过滤掉我想要的事件。 我正在调查的目标行为:

process.on('events', event => {
   if (event is 'unhandledRejection') {
     doSomething();
   }
   else if(event is 'uncaughtException') {
     doSomethingElse();
   }
   else {
     ignore();
   }
});

参考:https://nodejs.org/api/process.html#process_event_unhandledrejection

1 个答案:

答案 0 :(得分:0)

在文档中,process是扩展“ EventEmitter”的类。看来您无法列出或访问所有“过程”事件。

基本上,EventEmitter类具有.listeners()方法,该方法列出了所有打开的侦听器,但是如果您希望在.listeners()方法上添加侦听器,则需要先添加侦听器。

如果您真的想使用“自定义”和“丑陋”的方法来执行此操作,则可以执行以下操作:

const events = ["beforeExit", "rejectionHandled", "uncaughtException", "exit"]; // list all the process events here...

events.forEach((eventName) => {
    console.log('listening on ', eventName);
    process.on(eventName, (...args) => {
        console.log('event ' + eventName + ' was called with args : ' + args.join(','));
    });
});

// quit process with exit code for example
process.exit(5);

// will be print :
// listening on  beforeExit
// listening on  rejectionHandled
// listening on  uncaughtException
// listening on  exit
// event exit was called with args : 5