Как запустить промежуточное ПО NodeJS/connect после вызова responsee.end ()?

Я хотел бы добиться чего-то подобного:

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 я попал в часть, которая каким-то образом подразумевает, что если заголовки уже отправлены, то выполнение обработчика маршрута должно инициализировать заголовки ответов.

Вопрос в том, является ли вышеупомянутое поведение преднамеренным (, то есть выполнение любого кода после того, как обработчик маршрута закончил отправку ответа, является чем-то совершенно невообразимым, или это просто ошибка в соединении?

12
задан Peter Aron Zentai 4 July 2012 в 20:46
поделиться