所以,我有一個路由功能如下所示:在路由功能之外發送http響應?
var http = require('http').createServer(start);
function start(req, res){
//routing stuff
}
再下面,我有一個socket.io事件偵聽器:
io.sockets.on('connection', function(socket){
socket.on('event', function(data){
//perform an http response
}
}
當socket事件「事件」被調用,我想執行類似下面的HTTP響應:
res.writeHead(200, {'Content-disposition': 'attachment; filename=file.zip'})
res.writeHead(200, { 'Content-Type': 'application/zip' });
var filestream = fs.createReadStream('file.zip');
filestream.on('data', function(chunk) {
res.write(chunk);
});
filestream.on('end', function() {
res.end();
});
最後這部分,路由功能內執行時工作得很好,但不幸的是,當它是從套接字事件中調用的,它當然不起作用,因爲它沒有引用'req'或'res'對象。我會如何去做這件事?謝謝。
嗯,我肯定更傾向於使用第二種解決方案(由於簡單性和兼容性),但我仍然遇到問題。我希望它的工作原理是我創建這個獨特的URL並重定向客戶端,然後將路由器功能路由到我要下載文件的請求。問題:爲了路由這個「即時」url,我將不得不將它添加到我的url處理程序數組中,這是一個公共數組;因此,這個所謂的「獨特」網址不再是唯一的。我將如何將其保存爲客戶特定的網址? – Ari
很多網站只是通過晦澀的網址來做到這一點:當您購買[謙虛的獨立包](http://www.humblebundle.com/)時,您會得到一個唯一的網址,但沒有任何東西阻止您將該網址發送給其他人。要添加一層安全性,您必須將其鏈接到用戶帳戶並進行身份驗證(使用cookie)。 – rdrey
好吧,我想現在要做的就是現在。我知道它正常工作,但我可能會添加一個cookie檢查,就像您在接觸時說的那樣。謝謝您的幫助! – Ari