Vorrei realizzare qualcosa di simile:Come eseguire un middleware NodeJS/connect dopo che è stato richiamato responde.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);
Quando mi rannicchio per l'indirizzo, ricevo un eccezione alla console lamentarsi intestazioni non possono essere disturbati dopo essere stato inviato, che è abbastanza giusto. Solo che non tocco l'oggetto risposta.
/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)
test del livello di NodeJS/Connetti sono entrato in una parte che implica in qualche modo che se le intestazioni siano già inviati quindi l'esecuzione di un gestore di rotta deve inizializzare intestazioni di risposta.
La domanda è se il comportamento di cui sopra è intenzionale (vale a dire che l'esecuzione di qualsiasi codice dopo un gestore di percorso ha finito di inviare una risposta è qualcosa di assolutamente inimmaginabile o questo è semplicemente un bug in Connect?
Stai facendo 'res.end (" ciao ")' nel tuo codice –
sì. l'elaborazione della risposta viene eseguita, la risposta è pronta per essere trasmessa. e ora mi piacerebbe ad esempio inserire un registro o ripulire qualcosa. –
Hai trovato un modo per farlo visto che hai fatto questa domanda? Sembra che non ci siano risposte su questo thread e sto cercando di capire perché il team di Connect ha implementato le cose come hanno fatto. – conradkdotcom