Javascript 未定义';这';尝试在类内调用emit方法时从EventEmitter扩展类

Javascript 未定义';这';尝试在类内调用emit方法时从EventEmitter扩展类,javascript,node.js,Javascript,Node.js,我试图使用自定义事件发射器来处理webhook,但当从类中调用方法时,我总是将“this”作为未定义的 serviceWebhook.js class WebhookHandler extends EventEmitter{ constructor (){ super(); } receiver(req, res){ try { res.sendStatus(200); if (req.body && req.body.acti

我试图使用自定义事件发射器来处理webhook,但当从类中调用方法时,我总是将“this”作为未定义的

serviceWebhook.js

class WebhookHandler extends EventEmitter{
  constructor (){
    super();
  }
  receiver(req, res){
    try {
      res.sendStatus(200);
      if (req.body && req.body.action) {
        this.emit(req.body.action, req.body)
      }
    } catch (error) {
      console.log(error)
    }
  }
}
module.exports = {
  WebhookHandler: WebhookHandler
}
var webhookh = new serviceWebhook.WebhookHandler();
router.post('/webhookendpoint', webhookh.receiver);
webhookh.on('action_one', function name(message) {
  console.log('EMITTED')
  console.log(message)
}
index.js

class WebhookHandler extends EventEmitter{
  constructor (){
    super();
  }
  receiver(req, res){
    try {
      res.sendStatus(200);
      if (req.body && req.body.action) {
        this.emit(req.body.action, req.body)
      }
    } catch (error) {
      console.log(error)
    }
  }
}
module.exports = {
  WebhookHandler: WebhookHandler
}
var webhookh = new serviceWebhook.WebhookHandler();
router.post('/webhookendpoint', webhookh.receiver);
webhookh.on('action_one', function name(message) {
  console.log('EMITTED')
  console.log(message)
}
这是我得到的错误:

TypeError:无法读取未定义的属性“emit”

我也尝试过这个:

super.emit(req.body.action, req.body)
但是我得到了这个错误:


TypeError:无法读取未定义的属性“\u events”

将WebhookHandler类实例的receiver方法传递给路由器的回调会移动该方法的词法范围。 试试:
router.post('/webhookendpoint',webhookh.receiver.bind(webhookh))

这将把回调中的范围绑定到WebhookHandler实例的范围。

使用
router.post('/webhookendpoint',(req,res)=>webhookh.receiver(req,res)),查看bindThank似乎也起作用