node.js - 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 秒发送一次数据。我怎样才能正确地做到这一点而不会发生该错误?
解决方案
res.json 结束请求的生命周期,即使它是在间隔内调用的。为了实现您正在寻找的东西,我建议不要在单个请求中执行此操作。相反,可能是某种调度程序,或者可能在客户端调用端点上设置间隔。
推荐阅读
- swiftui - 找不到名为“airport.express”的系统映像
- ios - 如何在 JavaScript 中解密 Swift CryptoKit chacha20-poly1305 密码?
- python - 为什么 reticulate 在获取 Python 脚本时会产生 FileNotFound 错误?
- c++ - c++模板和继承,模板可以更有选择性吗
- linux - awk 重命名了一些文件,并留下了一些要重命名的文件
- python - 如何对dict中的值求和?蟒蛇,烧瓶
- ios - 如何使用 ios 谷歌日历中的链接添加事件
- python - Python,列表到 Json
- ios - 需要为使用 Swift Ionic 的目标正确配置 Swift 语言版本
- python - 使用递归(描述符协议?)从反序列化的 JSON 动态创建 Python 对象