Node.js NodeJS express框架多次读取同一事件

Node.js NodeJS express框架多次读取同一事件,node.js,http,express,wso2,Node.js,Http,Express,Wso2,我正在使用一个服务(WSO2CEP),它向我开发的node js程序发送事件,我们称之为receiver.js,然后将这些事件存储在mongo db中。WSO2CEP和receiver.js之间的通信是通过HTTP连接完成的。我面临的问题是,当WSO2发送一个事件时,receiver.js将其捕获并存储在db中,几秒钟/分钟后,它检测到一个新事件已到达(这不是真的),并将其再次存储在db中。第二个事件与第一个事件相同 当我看到这一点时,我认为问题在于WSO2多次发送同一事件,但我已经对其进行了调

我正在使用一个服务(WSO2CEP),它向我开发的node js程序发送事件,我们称之为receiver.js,然后将这些事件存储在mongo db中。WSO2CEP和receiver.js之间的通信是通过HTTP连接完成的。我面临的问题是,当WSO2发送一个事件时,receiver.js将其捕获并存储在db中,几秒钟/分钟后,它检测到一个新事件已到达(这不是真的),并将其再次存储在db中。第二个事件与第一个事件相同

当我看到这一点时,我认为问题在于WSO2多次发送同一事件,但我已经对其进行了调试,我100%确定只发送了一个事件,因此问题似乎是HTTP连接

HTTP连接由receiver.js作为服务器和WSO2作为客户端处理,后者通过HTTP post请求发送事件。receiver.js中的http服务器实现是使用“express”框架完成的。从下面的代码块中可以看出

'use strict';
const express = require('express');
const bodyParser = require('body-parser');
const EventEmitter = require('events');

const   port = Whatever;


module.exports = class WSO2Server extends EventEmitter {
  constructor () {
    super();
    const   app = express();
    app.use(bodyParser.json());       // to support JSON-encoded bodies

    app.route('/Whatever').post( (req, res) => {
      let event = req.body;
      this.emit('event', event);
    });

    this.server = app.listen(port);
  }

  destroy () {
    this.server.close();
  }
}

我怀疑这些事件存储在queu(或类似)中,并且每隔一段时间就被重新传输一次。你知道吗?谢谢您查看您的代码,我根本看不到您在使用响应对象。调用
this.emit('event',event)之后
您应该调用类似于
res.status(201.end()将HTTP状态201分派回调用客户端

因为您没有在响应对象上设置任何信息,所以您的应用程序挂起并且没有对HTTP调用做出响应。因此,像nginx或apache这样的东西会在特定超时后重新向应用程序发出请求


如果您显式地使用
res.status(201.end())创建响应则您的请求将正确结束,不会重复呼叫。

非常感谢!这就是问题所在:)@AngelRubi-brilliant!很高兴你把它修好了,我会更新我的答案,使之更加自信,我不是100%确定这会是个问题。