【发布时间】:2014-02-18 23:30:15
【问题描述】:
我想实现这样的目标:
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 层我进入了一个以某种方式暗示如果标头已发送,则执行路由处理程序必须初始化响应标头的部分。
问题是上述行为是否是故意的(即在路由处理程序完成发送响应后执行任何代码是完全不可想象的,或者这只是连接中的错误?
【问题讨论】:
-
您在代码中使用
res.end("hello") -
是的。响应处理完成,响应准备发送。现在我想放置一个日志或清理一些东西。
-
自从你问了这个问题后,你有没有找到办法做到这一点?这个帖子似乎没有任何回应,我试图理解为什么 Connect 团队会按照他们的方式实施。
-
不,我没有找到任何解决方案,所以选择退出所需的功能。
标签: javascript node.js architecture connect