Node 0.8.25 と Express 3.4.0 を実行しています。
よく働く。
Node 0.10 Stable にアップグレードしようとしたところ、奇妙な問題が発生し始めました。
たとえば、次のような (一種の) ルートがあります。
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" );
}
});
});
Node 0.10 にアップグレードした後、このルートを初めて呼び出すと、すべてが期待どおりに機能します。
ただし、ルートが 2 回目に呼び出されると、「ヘッダーは既に送信されました」というエラーでアプリケーションがクラッシュします。
応答に既に存在するヘッダーを確認したかったのです。そこで、ヘッダーが送信される前に、getPDF コールバックの先頭に以下を追加しました。
console.log( res._headers );
クラッシュする直前に、次のように出力されます。
Content-type application/pdf
Cache-Control no-cache
Accept-Ranges none
Content-Disposition inline; filname = stuff.pdf
私の古い応答オブジェクトが何らかの形でぶらぶらしているように見えますか? ここで何が起こっているのでしょうか?