在NodeJS上设置的ExpressJS中,我有一些像这样的代码:
app.get('/keys/readresults/:keyname', basic_auth, function(req,res){
res.writeHead(200, {'content-type': 'text/json'});
setInterval(
go_to_database_and_get('stuff', function (database_replies) {
res.write(database_replies)
})
,5000);
});
为了简单起见,代码就是这样写的(如果有人想要真正的代码,我很乐意将它发布在一些pastebin中)。
当我curl -u username:password http://localhost:4000/keys/readresults/key
正是我想要发生的事情时会发生什么:我得到一个200状态标题,它会检查数据库中我想要的任何结果并将响应写回给我,然后等待5秒并搜索对于数据库中的新结果并再次写入响应,等等每隔5秒钟。
问题是当我退出curl时,循环会一直持续下去。 如果请求结束,我如何告诉express或nodejs它应该结束该循环(我猜是clearInterval)
答案 0 :(得分:7)
如此简单
app.get('/keys/readresults/:keyname', basic_auth, function(req,res){
res.writeHead(200, {'content-type': 'text/json'});
var no = setInterval(
go_to_database_and_get('stuff', function (database_replies) {
res.write(database_replies)
});
,5000);
req.on("close", function() {
clearInterval(no);
});
});
答案 1 :(得分:7)
req.on('close', ...)
在Express 4中不再有效。使用on-finished
中间件。
答案 2 :(得分:0)
对于Express 4.X,它是req.on("end", () => {})
,最好将其添加为Express中间件。
是的,但是on-finished
npm软件包也可以使用。