Tôi muốn đạt được một cái gì đó như thế này:Làm thế nào để có một NodeJS/kết nối phần mềm trung gian thực hiện sau khi responde.end() đã được gọi?
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);
Khi tôi cuộn tròn cho địa chỉ, tôi nhận được một ngoại lệ đối với giao diện điều khiển phàn nàn về tiêu đề không thể bị làm phiền sau khi được gửi mà là công bằng đủ. Chỉ rằng tôi không chạm vào đối tượng phản hồi.
/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)
Gỡ rối lớp NodeJS/Connect tôi đã vào một phần nào đó ngụ ý rằng nếu tiêu đề đã được gửi sau đó thực hiện một handler tuyến đường phải khởi tạo tiêu đề phản ứng.
Câu hỏi đặt ra là nếu các hành vi nêu trên là có chủ ý (tức là thấy việc thi hành bất kỳ mã sau một handler tuyến đường đã hoàn tất việc gửi một phản ứng là một cái gì đó hoàn toàn không thể tưởng tượng hay chỉ đơn giản là một lỗi trong kết nối?
Bạn đang thực hiện 'res.end (" hello ")' trong mã số –
có. xử lý đáp ứng được thực hiện, đáp ứng đã sẵn sàng để được truyền đi. và bây giờ tôi muốn ví dụ đặt một bản ghi hoặc dọn dẹp một cái gì đó. –
Bạn đã tìm ra cách để làm điều đó vì bạn đã hỏi câu hỏi này chưa? Có vẻ như không có phản ứng về chủ đề này và tôi đang cố gắng hiểu tại sao nhóm Connect thực hiện mọi thứ theo cách họ đã làm. – conradkdotcom