停止先前的帖子请求Node.js

时间:2018-05-29 23:32:00

标签: node.js express

TLDR:如何设置发送请求,每秒将接收到的数据发送到另一个源,然后在发出相同的发布请求时,它会停止发送旧数据并开始发送新数据数据每秒一次。

我有一个运行Express的Node.js服务器。每当客户端向我的一个路由发出post请求时,我每秒(使用setInterval)将数据发送到Apache Kafka队列。当向我的服务器发出新的post请求时,它会创建该setInterval函数的新实例,并实际每秒发送新数据和旧数据。

我需要Node.js停止将旧数据发送到队列并发送新数据。

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

你有几个选择。

在创建新计时器之前停止原始间隔计时器对象。当您setInterval()它返回一个计时器对象时,您可以稍后使用clearInterval()。你需要保存它。然后,当您创建新的间隔计时器时,可以在旧计时器上调用clearInterval()

让一个计时器一直在运行。只需替换您要发送的数据。在这种情况下,您只需保持原始计时器的运行,并更新每次触发时要发送的存储数据。然后,你永远不会最终运行多个计时器。

答案 1 :(得分:0)

  1. 有一个调用setInterval的中心位置,并保留setInterval的结果。
  2. 使用clearInterval取消之前的setInterval调用

答案 2 :(得分:0)

您需要一个可从您的逻辑中访问的属性,以便将数据发送到Kafka。该属性将作为您的发布数据的当前状态。第一次收到帖子时,您将启动状态并运行setInterval()。之后你只需要更新setInterval中的状态和函数就会发送更新的数据。

它看起来像那样:

let postData;

router.post('/', function(req) {
  if(!postData) {
    //run your setInterval logic here
  } else if(req.body !== postData) {
    postData = req.body
  }
});