请求模块,当浏览器取消时如何停止流式传输

时间:2016-03-03 07:37:54

标签: node.js request streaming

我想使用我的服务器作为代理来从另一台服务器传输远程文件。

我有两个源代码来完成这些工作

http = require('http')
http.createServer(function(req, res) {
    var externalReq = http.request({
        hostname: "brave-download.global.ssl.fastly.net",
        path: "/releases/0.7.16/winx64/BraveSetup.exe"
    }, function(externalRes) {
        res.setHeader("content-disposition", "attachment; filename=File.exe");
        externalRes.pipe(res);
    });
    externalReq.end();
}).listen(8080);

使用上面的代码,当我取消下载时,服务器(我的本地服务器)也将停止从远程服务器获取数据。

我有另一个源代码

var http = require('http'),
    request = require('request');

http.createServer(function(req, res) {
    res.setHeader("content-disposition", "attachment; filename=File.exe");
    request('https://brave-download.global.ssl.fastly.net/releases/0.7.16/winx64/BraveSetup.exe').pipe(res);
}).listen(8080);

此源代码执行与上述相同的工作。但是当我从浏览器取消下载时。它不会停止从远程服务器获取数据。它会不断获取数据,直到下载完成。

我的问题是,当我取消下载后,如何让第二个代码停止从远程服务器获取数据。

1 个答案:

答案 0 :(得分:2)

这应该听取取消并中止请求。

var http = require('http'),
    request = require('request');

http.createServer(function(req, res) {
    res.setHeader("content-disposition", "attachment; filename=File.exe");
    var dl = request('https://brave-download.global.ssl.fastly.net/releases/0.7.16/winx64/BraveSetup.exe');
    dl.pipe(res);
    req.on('close', function () {
        dl.abort();
    })
}).listen(8080);