Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ExpressJS:如何知道请求何时完成?_Javascript_Node.js_Setinterval_Express - Fatal编程技术网

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

Javascript ExpressJS:如何知道请求何时完成?,javascript,node.js,setinterval,express,Javascript,Node.js,Setinterval,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) {

在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);
});
为了简单起见,代码是这样写的,如果有人想要真正的代码,我很乐意将其发布在一些粘贴箱中

当我curl-u username:password正是我想要的:我得到一个200状态头,它检查数据库中我想要的任何结果,并将响应写回给我,然后等待5秒钟,在数据库中搜索新结果,并每隔5秒钟再次写入响应,依此类推

问题是,当我退出curl时,循环将永远继续。我怎么告诉express或nodejs它应该在请求结束后立即使用clearInterval结束循环

这么简单

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);
    });
});
“关闭”时的请求。。。不再适用于Express 4。使用中间件。

对于express 4.X,它是req.onend,=>{},最好将其添加为express中间件


是的,但在完成的npm包上也能工作。

@JoaoPintoJeronimo您会发现express req和res对象扩展了node.js core中的本机HTTPRequest和HTTPResponse对象。所以回到那些方法上来吧,在Express 4中不再有效,请参阅我的帖子。简而言之,在完成的中间件上使用。这不再是真的,或者至少在'close'上是req。。。Express 4.x文档中仍然间接引用了。