gpt4 book ai didi

javascript - 如何在调用 response.end() 后执行 Node JS/connect 中间件?

转载 作者:IT老高 更新时间:2023-10-28 23:09:14 28 4
gpt4 key购买 nike

我想实现这样的目标:

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);

当我为地址 curl 时,控制台出现异常,提示 header 在发送后无法被打扰,这很公平。只是我没有触摸响应对象。

/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 层我进入了一个以某种方式暗示如果 header 已发送,则执行路由处理程序必须初始化响应 header 的部分。

问题是上述行为是否是故意的(即在路由处理程序完成发送响应后执行任何代码是完全不可想象的,或者这只是连接中的错误?

最佳答案

不确定您是否找到了解决方案。

如果你想为请求周期设计一个后处理器,你可以使用一个中间件来监听响应对象上的“完成”事件。像这样:

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();
});

“完成”事件附加的函数将在响应写出后执行(这意味着NodeJS已将响应头和响应体交给操作系统进行网络传输)。

我想这一定是你想要的。

关于javascript - 如何在调用 response.end() 后执行 Node JS/connect 中间件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11335278/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com