2016-03-03 20 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); 
相關問題