在 Node.js 中定期刷新并发送响应对象

Flush and send response object periodically in Node.js

我是 Node.js 的新手,我正在尝试使用以下代码定期刷新数据:

router.post('/getMessage',function(req,res){
    setInterval(findMessage,5000);
    function findMessage() {
        Message.find(
            {
                $or: [
                    {sender: req.body.sender, receiver: req.body.receiver},
                    {sender: req.body.receiver, receiver: req.body.sender}
                ]
            },
            (err, data) => {
                res.send({success: true, data: data});
            }
        );
    }
    });

但这给出了一个错误:"Cannot set headers after they are sent"。我知道 res.send 隐式调用 res.end() ,因此会发生此错误。并且也尝试过 res.write() 。但我返回的是一个对象而不是字符串或缓冲区,因此它也无法工作。

如果有人能举例说明如何准确地实现这一点,那就太好了。

response.send() 方法执行两个任务

1. write content on the response and send.
2. End connection with res.end().

因此,当您执行 response.send() 时,它会发送您的消息并关闭连接。因此,您收到错误 "Cannot set headers after they are sent".

因此,结论是您不能使用 response.send() 发送多个响应。

您可以通过 socket.io 实现,或者您可以在一段时间后从前端发出请求。