如何识别从哪个流中在node.js中发出了事件

时间:2018-11-28 17:54:57

标签: javascript node.js stream

我有来自Db的流,并且正在通过HTTP(请求)将其分散到许多HTTP服务器。 要拆分此流,我使用passThrough 一切正常,但是当事件被调用时,我不知道哪个流发出它。 有什么解决方案可以识别该流吗? 我正在使用错误,结束,数据和响应事件。 作为回应,我有关于主机的信息,但最重要的是在错误eventListener中识别它。

const stream = await getDataStream(id);
const passThrough = new PassThrough();
stream.pipe(objectToString).pipe(passThrough);

for (let host of hostsList) {
  startedRequestsCount++;
  host.stream
    .on('error', errorHandler)
    .on('data', dataHandler)
    .on('response', responseHandler)
    .on('end', resolveAfterAllRequests);
  passThrough.pipe(host.stream);
}

我对此解决方案有很多疑问,但是目前,它正在起作用。 问题是当我收到错误消息并想知道哪个主机发生故障时。

奖励问题

如果我通过HTTP进行流传输,我可以处理背压问题吗?

1 个答案:

答案 0 :(得分:1)

在定义处理程序时,请使用curring获取其他流参数:

  const errorHandler = stream => error => {
   console.log(stream, error);
 };

然后煮咖喱:

 host.stream
  .on('error', errorHandler(host.stream));

确保您可以使用该模式传递多个参数。