我想实现以下目标:
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层我陷入了某种程度上暗示着,如果已经发送了报头,则执行路由处理程序必须初始化响应报头。
问题是上述行为是否是故意的(即,路由处理程序完成发送响应后执行任何代码是完全难以想象的,还是仅仅是连接中的错误?
不知道您是否找到解决方案。
如果要为请求周期设计后处理器,则可以使用中间件来侦听响应对象上的“完成”事件。像这样:
app.use(function(req, res, next){
res.on('finish', function(){
console.log("Finished " + res.headersSent); // for example
console.log("Finished " + res.statusCode); // for example
// Do whatever you want
});
next();
});
写入响应后,将执行附加到“ finish”事件的函数(这意味着NodeJS已将响应头和主体传递给OS进行网络传输)。
我想这一定是您想要的。
目标 理解中间件的概念 了解 Connect 的实现 课程内容 原生 httpServer 遇到的问题 中间件思想 Connect 实现 Express 简介 这是从 httpServer 到 Express 的升级过程。 HTTP Nodejs 的经典 httpServer 代码 var http = require('http'); var server = http.createServer
我有一个中间件,它可以在不允许他访问路由的情况下限制对路由的访问。我把它添加到: 路线: 控制器功能:: 现在说真的:如果角色id为2,中间件应该返回404视图而不执行路由。但它打印执行字符串在屏幕上! 1.如果我删除或评论: 它返回 如果我把路线登记移到 “网络”= 和评论: 然后屏幕显示“中间件”,中间件工作 我的问题是,如果我使用它,为什么middlware允许函数执行 在第一个手柄功能?为
我正在Java的Android应用程序中工作,其中调用类并在OnCreateView方法中进行测量。然而,一旦完成,我必须自动发送他的测量结果。但我不能。是否有继承自:java.lang.对象android.app.片段的方法,可以在OncreateView进程之后执行函数。因为目前数据已经发送,但还没有时间填充。 谢谢你的帮助
问题内容: 注意对于那些使用Redis挣扎的人,必须启动Redis服务器。 在Windows上,有一个redis发行版,请查看以下链接:https : //github.com/dmajkic/redis/downloads,然后通过启动“ redis-server.exe”来启动服务器。 我正在遵循有关node.js的教程。本教程使用Express和Redis。我安装了redis和connect
问题内容: 有一种简单的方法可以在调用之前和之后调用JavaScript动作,例如,我想在后备bean中调用 之前 和 之后 调用JavaScript动作: 添加多个元素似乎不起作用(也许应该吗?!),例如 仅被调用。 问题答案: 使用属性。它必须指向一个回调函数引用(所以不要包括括号!): 实际的回调函数如下所示(JSF会自己提供参数):
我用的是JavaFX。 当某个文件没有加载时,我希望阶段关闭,该实例中的代码停止执行。