如何在超时后更新ExpressJS服务器对POST请求的响应

时间:2017-12-26 16:29:44

标签: javascript node.js express

我正在使用Node.js和ExpressJS编写服务器代码。

问题是当客户端发送POST请求告诉服务器使某些外部设备上移或下移时会出现这种情况。

我希望服务器向该POST请求发送初始响应,说明设备正在移动。当设备停止时,它会将该信息发送到服务器。然后我想改变响应的主体,因此它说设备已停止。

在对一个POST请求的一个响应的上下文中是否可以这样做?

现在我准备了一些我想要完成的模拟代码。 function setArray(chartType, data, cb){ cb("hello") } setArray('scatter', data, function(x){ console.log(x) // hello }); 函数模拟设备移动。超时结束'模拟'设备停止移动(即它一直向上移动)

function setArray(chartType, data, cb){
 cb(data)
} 

setArray('scatter', "Hello ", function(x){
 setArray('scatter', "World!", function(y){
    console.log(x + y)// Hello world!
 })
});

我知道setTimeout确实终止了服务器和客户端之间的连接。它被放置在那里只是为了更好地想象我想要完成的事情。我认为当天在ExpressJS中曾经有res.send("MOVING"); setTimeout(function () { if (req.body.direction === "UP") { res.send("OPENED"); } else { res.send("CLOSED"); } }, 1000); ,但在文档中没有提到它。我还发现了一个名为res.send()的npm包,但我认为我不能对其进行参数化(取决于res.write()值,第二个响应的值会有所不同)。

1 个答案:

答案 0 :(得分:0)

据我所知,这超出了HTTP请求的范围。应该只有一个回复。

根据您的要求,我建议使用websockets。

https://socket.io/是受欢迎的选择之一。

简单来说,您将拥有一个websocket服务器以及您的expressJs服务器。从客户端,您将使用socketIo客户端发出事件。收到事件后,服务器将向目标套接字连接发回第一个事件(MOVING)。然后在超时后,它将发出另一个事件(OPENED或CLOSED)