如何在超时后更新ExpressJS服务器对POST请求的响应
我正在使用Node.js和ExpressJS编写服务器代码。
问题是当客户端发送POST请求告诉服务器使某些外部设备向上或向下移动时会出现这种情况。
我希望服务器向该POST请求发送初始响应,说明设备正在移动。当设备停止时,它会将该信息发送到服务器。然后我想改变响应的主体,因此它说设备已停止。
在对一个POST请求的一个响应的上下文中是否可能?
现在我准备了一些我想要完成的模拟代码。 setTimeout
函数模拟设备运动。超时结束'模拟'设备停止移动(即它一直向上移动)
res.send("MOVING");
setTimeout(function () {
if (req.body.direction === "UP") {
res.send("OPENED");
} else {
res.send("CLOSED");
}
}, 1000);
我知道res.send()
确实结束了服务器和客户端之间的连接。它被放置在那里只是为了更好地想象我想要完成的事情。我认为当天在ExpressJS中曾经有过res.write()
,但在文档中没有提到它。我还发现了一个名为express-mung
的npm包,但我不认为我可以参数化它(取决于req.body.direction
值,第二个响应的值会有所不同)。
据我所知,这超出了HTTP请求的范围。应该只有一个回应。
根据您的要求,我建议使用websockets。
https://socket.io/是受欢迎的选择之一。
简单来说,您将拥有一个websocket服务器以及您的expressJs服务器。从客户端,您将使用socketIo客户端发出事件。收到事件后,服务器将向目标套接字连接发回第一个事件(MOVING)。然后在超时后,它将发出另一个事件(OPENED或CLOSED)