首页 > 解决方案 > NodeJS setInterval 并向客户端发送数据

问题描述

我想执行相同的路由setInterval以将数据发送到客户端。目前我在第二个间隔后收到错误:Cannot set headers after they're sent to the client.

这是路线:

router.get('/api/update-time', async(req, res) => {
    try {

        const users = await User.find({served: false});
        let minutes;
        let hours;
        let seconds;

        for(let i = 0; i < users.length; i++) {
            users[i].appointment -= 5;
            users[i].save();
            seconds = Math.floor(users[i].appointment / 1000);
            minutes = Math.floor(users[i].appointment / 60);
            hours = Math.floor(minutes / 60);
        }

        setInterval(() => {
            res.json({users, hours, minutes, seconds});
        }, 5000)

    } catch (error) {
        console.log(error);
    }
});

我想一次又一次地每 5 秒发送一次数据。我怎样才能正确地做到这一点而不会发生该错误?

标签: node.js

解决方案


res.json 结束请求的生命周期,即使它是在间隔内调用的。为了实现您正在寻找的东西,我建议不要在单个请求中执行此操作。相反,可能是某种调度程序,或者可能在客户端调用端点上设置间隔。


推荐阅读