2015-11-24 38 views
0

我有一個包含文件上傳/下載功能的頁面。 當我嘗試下載文件取消保存文件提示(發生在res.writeHead部分之後)時,它將保留文件頭並等待res.writeres.end部件。如何在取消保存文件提示時避免「發送後無法設置標題」

問題是,如果提示被取消,這些都會被轉義,從而使其他響應失敗並顯示錯誤「發送後無法設置標題」。

反正有沒有辦法結束響應捕獲已取消的提示事件是某種方式,或以任何其他方式來避免這種情況?

,設置標題和(位於被稱爲在/download/:filename路線功能)文件下載流數據的部分是:

res.writeHead(200, {'Content-Type': 'application/octet-stream'}); 
    var readstream = gfs.createReadStream({ 
     filename: files[0].filename 
    }); 

    readstream.on('data', function(data){ 
     res.write(data); 
    }); 

    readstream.on('end', function(){ 
     res.end(); 
    }); 

如果這個順序沒有完成,每其他響應失敗。

例如:

res.status(403).send('You have no access to this file');

在另一個控制器

,稱爲在同一頁中。 (我想,如果我重定向到另一個網頁標題實際上清關?

*如果我選擇下載位置,然後按確定,沒有錯誤*我沒有在雙反應發生

循環,以避免這種錯誤的答案:)快遞

+0

您使用的是一個全球性的資源OBJ ECT?請告訴我們一些代碼 –

+0

請添加一些代碼 – prasun

+0

感謝您的答案,更新了代碼 – melkoras

回答

1

您可以檢查res.headersSent,這樣你就能夠避免異常

if(res.headersSent){ 
    return; 
} else { 
    //set you headers 
} 
+0

感謝您的快速答案。不知道有這個檢查。仍然我似乎沒有找到任何方法來刪除API中的這些標頭:/ – melkoras

+0

嘗試'res.set(headerName,null)' – prasun

+0

問題已修復..出於某種原因,我有一個查詢mongo返回超過1個文件,當我期待只有1個響應。無論如何感謝:) – melkoras

相關問題