簡體   English   中英

Nodejs - Express res.download 在發送異常后無法設置標頭

[英]Nodejs - Express res.download giving Can't set headers after they are sent exception

我想制作一個可以提供任何擴展文件的 api。 像這樣: http://localhost/download/[file].[extension]

這是我的代碼,但它間歇性地給出以下消息:發送后無法設置標頭。

  var express = require('express');
  var app = express();

  app.get('/download/:fileName/:extension', function(req, res){
    var file = __dirname + '/' + req.params.fileName + '.' + req.params.extension;
    res.download(file, function(err){
        if (err) {
          res.sendStatus(404);
        }
      res.end();
    }); 
  });

  var server = app.listen(3000, function () {
    var host = server.address().address;
    var port = server.address().port;

    console.log('app listening at http://%s:%s', host, port);
  });

res.download已經發送了一個響應(雖然在出現錯誤的情況下並不總是如此)

你可以通過這樣做來解決這個問題

res.download(file, function(err){
  if(err) {
    // Check if headers have been sent
    if(res.headersSent) {
      // You may want to log something here or do something else
    } else {
      return res.sendStatus(SOME_ERR); // 404, maybe 500 depending on err
    }
  }
  // Don't need res.end() here since already sent
}

上面評論中提到的其他更改:

  • download使用sendFile ,你不需要res.end()之后
  • download的文檔警告您在處理錯誤時需要檢查res.headersSent ,因為標頭可能已經發送,這意味着您無法更改狀態

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM