2013-09-22 162 views
3

我一直在運行Node 0.8.25和Express 3.4.0。升級到節點0.10後的問題

工程很好。

我試着升級到節點0.10穩定,我開始有奇怪的問題。

例如,我有一個看起來路線(有點)像這樣:

app.post("/toPDF", auth.isAuthorized, function(req, res, next){ 

    getPDF(req.data, function(err, pdfData) { 
     if (err) { 
      next(err); 
     } else { 
      res.setHeader("Content-type", "application/pdf"); 
      res.setHeader("Cache-Control", "no-cache"); 
      res.setHeader("Accept-Ranges", "none"); 
      res.setHeader("Content-Disposition", "inline; filename=stuff.pdf"); 
      res.end(pdfData.raw, "binary"); 
     } 
    }); 

}); 

升級後的節點0.10,第一次我把這個路線,一切正常。

但是,第二次調用路由時,應用程序崩潰,並顯示錯誤「Headers already sent」。

我想看看哪些頭已經出現在響應中。所以我在發送任何頭文件之前將以下內容添加到getPDF回調的頂部。

console.log(res._headers); 

崩潰權利之前,這種輸出:

Content-type application/pdf 
Cache-Control no-cache 
Accept-Ranges none 
Content-Disposition inline; filname = stuff.pdf 

看起來好像我以前的響應對象以某種方式遊逛?任何想法可能會發生在這裏?

+1

https://github.com/joyent/node/wiki/Api-changes-between-v0.8-and-v0.10 –

+0

@Benjamin - 我不清楚從閱讀這些更改我做錯了什麼。 – user1031947

+0

我並不意味着這可以解決您的問題(我無法根據您提供的信息來查看它,而且我認爲這很有趣 - 因此得到了讚賞)。我只是覺得我會評論這個,因爲這是一個很好的開始。 –

回答

0

您可能在中間件的某個地方調用next()兩次 - 檢查auth.isAuthorized或您正在使用的任何其他地方。如this question中所述。