ExpressJS:如何知道请求何时完成?

Joã*_*imo 9 javascript setinterval node.js express

在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);
});
Run Code Online (Sandbox Code Playgroud)

代码是为了简单而编写的(如果有人想要真正的代码我很乐意将它发布在一些pastebin中).

当我正是我想要发生的事情时会发生什么:我得到一个200状态标题,它检查数据库是否有我想要的结果并将响应写回给我,然后等待5秒并在数据库中搜索新结果并写入再次响应,等等每隔5秒钟.curl -u username:password http://localhost:4000/keys/readresults/key

问题是,当我退出curl时,循环会一直持续下去.如果请求结束,我如何告诉express或nodejs应该结束该循环(我猜是否使用clearInterval)

Ahm*_*sih 9

req.on('close', ...)不再适用于Express 4.使用on-finished中间件.


Ray*_*nos 8

req.on("close")

这么简单

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);
    });
});
Run Code Online (Sandbox Code Playgroud)

  • 不再适用于 Express 4,请参阅我的帖子。简而言之,使用“on-finished”中间件。 (4认同)