私はこのようなことを達成したいと思います:
var c = require('connect');
var app = c();
app.use("/api", function(req, res, next){
console.log("request filter 1");
next();
});
app.use("/api", function(req, res, next){
console.log("request filter 2");
next();
});
app.use("/api", function(req, res, next){
console.log("request handler");
res.end("hello");
next();
});
app.use("/api", function(req, res, next){
console.log("response post processor");
next();
});
app.listen(3000);
アドレスをカールすると、送信後にヘッダーを気にすることができないというコンソールの例外が発生します。これは十分に公平です。応答オブジェクトに触れないことだけです。
/usr/bin/node app2.js
request filter 1
request filter 2
request handler
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (http.js:644:11)
at ServerResponse.res.setHeader (/home/zpace/node_modules/connect/lib/patch.js:59:22)
at next (/home/zpace/node_modules/connect/lib/proto.js:153:13)
at Object.handle (/home/zpace/WebstormProjects/untitled1/app2.js:25:5)
at next (/home/zpace/node_modules/connect/lib/proto.js:190:15)
at Object.handle (/home/zpace/WebstormProjects/untitled1/app2.js:19:5)
at next (/home/zpace/node_modules/connect/lib/proto.js:190:15)
at Object.handle (/home/zpace/WebstormProjects/untitled1/app2.js:14:5)
at next (/home/zpace/node_modules/connect/lib/proto.js:190:15)
at Function.app.handle (/home/zpace/node_modules/connect/lib/proto.js:198:3)
NodeJS / Connectレイヤーのデバッグ私は、ヘッダーがすでに送信されている場合、ルートハンドラーを実行すると、応答ヘッダーを初期化する必要があることを何らかの形で暗示する部分に入りました。
問題は、上記の動作が意図的なものであるかどうかです(つまり、ルートハンドラーが応答の送信を終了した後のコードの実行は、まったく想像を絶するものですか、それとも単に接続のバグですか?