2013-09-22 129 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中所述。