chciałbym osiągnąć coś takiego:Jak wykonać wykonywanie oprogramowania pośredniego NodeJS/connect po wywołaniu funkcji 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);
Kiedy zwijają na adres, otrzymuję wyjątek do konsoli narzekających nagłówków nie może być jedno po wysłaniu który jest wystarczająco fair. Tyle tylko, że nie dotykam obiektu odpowiedzi.
/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)
Debugowanie warstwę NodeJS/connect mam do części, która w jakiś sposób sugeruje, że jeśli nagłówki już wysłane następnie wykonanie obsługi trasy musi zainicjować nagłówki odpowiedzi.
Powstaje pytanie, czy powyższe działanie jest zamierzone (czyli, że wykonanie dowolnego kodu po obsługi trasy zakończy wysyłanie odpowiedzią jest coś zupełnie niewyobrażalnego lub jest to po prostu błąd w connect?
Wykonujesz 'res.end (" hello ")' w kodzie –
tak. przetwarzanie odpowiedzi jest zakończone, odpowiedź jest gotowa do przesłania. a teraz chciałbym na przykład umieścić dziennik lub coś posprzątać. –
Czy znalazłeś sposób, aby to zrobić, ponieważ zadałeś to pytanie? Wygląda na to, że nie ma odpowiedzi na ten wątek i próbuję zrozumieć, dlaczego zespół Connect zaimplementował rzeczy tak, jak oni. – conradkdotcom