2016-03-03 21 views
2

我想用我的服务器作为代理从另一台服务器传输远程文件。请求模块,当浏览器取消时如何停止流式传输

我有两个源代码做的工作

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); 

这个源代码做同样的工作类似上面。但是,当我从我的浏览器取消下载。它不会停止从远程服务器获取数据。在下载完成之前它会持续获取数据。

我的问题是我怎样才能让第二个代码停止从远程服务器获取数据,一旦我取消下载。

回答

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); 
相关问题