使用请求模块取消管道文件会抛出ESOCKETTIMEDOUT

时间:2015-11-16 22:37:01

标签: node.js

我正在用快递&做一个简单的请求request模块,并对.yith_magnifier_zoom_magnifier { position: absolute !important; margin: 0 auto !important; height: 100%!important; top: inherit!important; bottom: 100%; left: 50%!important; margin-left: -150px!important; } 的响应进行管道:

res

除非我取消下载,否则这就像魅力一样。结束事件不会触发,几秒钟后,会抛出ESOCKETTIMEDOUT错误。

如何关闭管道? These node docs声称我可以致电var pipe = request.get({ url: 'url-to-file' }); pipe.on('response', function (response) { req.on('close', function () { // these methods won't work: // pipe.unpipe(); // pipe.end(); // pipe.finish(); // pipe.close(); }); pipe.on('end', function () { // this will never fire if I cancel the request }); res.writeHead(response.statusCode, response.headers); pipe.pipe(res); }); ,但所有节点提供的.unpipe都不是功能(使用v0.12.7& 4.2.2&& 5.0.0进行测试),可能是因为它不是原始节点流。 我也尝试使用诸如结束,结束和关闭之类的事件,但它们都不起作用。

1 个答案:

答案 0 :(得分:2)

request.get()不返回纯node.js流,而是返回从本地Request类继承的Stream对象,并添加一些自定义方法。您要查找的方法是Request#abort()Source link)。

您的代码示例如下所示:

var pipe = request.get({
    url: 'url-to-file'
});

pipe.on('response', function (response) {

    req.on('close', function () {
        pipe.abort();
    });

    pipe.on('end', function () {
        // this will never fire if I cancel the request
    });

    res.writeHead(response.statusCode, response.headers);

    pipe.pipe(res);

});