Javascript 正确的方法是什么;完";来自express/connect中间件的请求?
假设我有这样的中间件Javascript 正确的方法是什么;完";来自express/connect中间件的请求?,javascript,node.js,express,connect,Javascript,Node.js,Express,Connect,假设我有这样的中间件 var express = require('express'); var app = express(); app.use(function (req, res, next) { var host = "example.com"; if (req.host !== host) { res.redirect(301, host + req.originalUrl); res.end(); } }); 我需要遵守什
var express = require('express');
var app = express();
app.use(function (req, res, next) {
var host = "example.com";
if (req.host !== host) {
res.redirect(301, host + req.originalUrl);
res.end();
}
});
我需要遵守什么样的规则
res.end()
?(或者res.redirect()
是否为我执行此操作?)next()
?(或者连接是否检测到请求已结束并干净地退出?)next()
,我想这意味着我可能会收到对我的中间件的请求,这些请求可能已经被链中更高的其他中间件终止;我如何保护自己不受这种伤害res.redirect()
确实调用了res.end()
本身李>
next()
;在生成重定向的情况下,它是一个端点,不应调用next()
,但如果req.host===host
,则需要调用next()
,将请求沿链向上移动到其他中间件/路由李>
需要注意的是,如果您还有其他处理要做,您仍然可以调用next,但是请注意,您已经发送了响应,因此响应对象已经完成,并且在很大程度上是响应后处理的变量。当您希望发送响应,然后执行其他较慢的操作(如与其他服务器通信以跟踪统计数据或发送电子邮件,或将内容推送到队列或与数据库通信等)时,这非常有用,因此真正结束express request/response链的是当您不再调用中间件时,它会被垃圾收集。