Javascript 在Express中停止执行已取消的请求

Javascript 在Express中停止执行已取消的请求,javascript,node.js,express,socket.io,Javascript,Node.js,Express,Socket.io,我正在创建一个向另一台服务器发出大量HTTP请求的应用程序,完成其中一个请求可能需要1分钟。一些用户取消了请求,但是我的应用程序仍然执行取消的请求 这是我的密码: var app = express(); app.get('/something', function (req, res) { function timeout(i) { setTimeout(function () { // lets assume there is a http r

我正在创建一个向另一台服务器发出大量HTTP请求的应用程序,完成其中一个请求可能需要1分钟。一些用户取消了请求,但是我的应用程序仍然执行取消的请求

这是我的密码:

var app = express();
app.get('/something', function (req, res) {
    function timeout(i) {
        setTimeout(function () {
            // lets assume there is a http request.
            console.log(i);
            timeout(++i);
        }, 100);
    }
    req.connection.on('close', function () {
        console.log('I should do something');
    });
    timeout(1);
});
app.listen(5000);
基本上,我想要的是在客户端关闭连接后停止console.log(I)调用。另外,如果可能的话,客户端会忽略“close-{id}”事件,并且当后端接收到close-{id}事件时,它会终止{id}请求

注意:我使用setTimeout来显示回调机制。这不是真正的代码

感谢您的帮助。

从文档“http.request()返回http.ClientRequest类的实例。”您可以调用返回对象的abort()方法。(警告,未测试代码)


setTimeout
分配给变量,然后在
close
处理程序中使用
cleartimout
。If可能会根据您的方法结构进行一些巧妙的重组,但类似于:

var myTimeout = setTimeout(...)
...
req.connection.on('close', function() {
    clearTimeout(myTimeout);
});

谢谢你的回答,但我认为这是一个误解。当客户端关闭连接时,我想退出节点应用程序,以便不再启动对something.com的任何进一步请求。我不想中止某个特定请求。@onum如果用户取消请求,是否确实要退出整个节点应用程序?不是整个应用程序,仅用于此请求以防止新的回调调用。@onum这正是我的代码应该实现的。我不知道为什么在请求处理程序中有setTimeout函数。那是干什么用的?您每秒发出10次http请求,还是模拟一个长请求?是的,模拟多个请求。在一次调用中,我必须执行200个请求。所以你可以把它看作是一个for循环,它的值是200,每个循环都有一个http请求和回调。马上就会有200个请求
var myTimeout = setTimeout(...)
...
req.connection.on('close', function() {
    clearTimeout(myTimeout);
});