Javascript 升级到节点0.10后出现的问题
我一直在运行Node 0.8.25和Express 3.4.0 效果很好 我尝试升级到节点0.10稳定,但我开始遇到奇怪的问题 例如,我有一条看起来(有点)像这样的路线:Javascript 升级到节点0.10后出现的问题,javascript,node.js,express,Javascript,Node.js,Express,我一直在运行Node 0.8.25和Express 3.4.0 效果很好 我尝试升级到节点0.10稳定,但我开始遇到奇怪的问题 例如,我有一条看起来(有点)像这样的路线: app.post( "/toPDF", auth.isAuthorized, function( req, res, next ){ getPDF( req.data, function( err, pdfData ) { if ( err ) { next( err );
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 ready sent”
我想看看响应中已经出现了哪些标题。因此,在发送任何标题之前,我在getPDF回调的顶部添加了以下内容
console.log( res._headers );
就在崩溃之前,这会输出:
Content-type application/pdf
Cache-Control no-cache
Accept-Ranges none
Content-Disposition inline; filname = stuff.pdf
看起来好像我的旧响应对象不知何故在四处游荡?有什么想法吗?您可能在中间件的某个地方调用了next()两次-检查auth.isAuthorized或您正在使用的任何其他名称。如中所述。@Benjamin-阅读这些更改后,我不清楚我做错了什么。我并没有暗示这可以解决您的问题(根据您提供的信息,我也看不到这一点,我认为这很有趣-因此投票结果是一致的)。我只是想用这个来评论一下,因为这是一个很好的开始。你能展示一个堆栈跟踪和更多的代码吗?您显示的代码没有问题。根据其他答案(),您确定没有调用
next()
两次吗?您的身份验证代码调用它吗?我们是否碰到了错误块,并导致它碰到了下一个?