node.js-为Express中的特定路由链接多个中间件
我只想验证一下内容,但无法在Express文档或在线文档中找到与此相关的内容(尽管我知道这是一个功能)。
我可以对其进行测试,但我实际上并没有一个很好的模板,希望听到社区的意见。
如果我这样定义快递路线:
app.get('/', function (req, res) {
res.send('GET request to homepage');
});
我还可以定义一个中间件并直接加载它,例如
middleware = function(req, res){
res.send('GET request to homepage');
});
app.get('/', middleware)
但是,我也可以链接这些路由中的至少一个来运行额外的中间件,例如身份验证,如下所示:
app.get('/', middleware, function (req, res) {
res.send('GET request to homepage');
});
这些是无限连锁的吗? 如果愿意,可以在给定的路由上添加10个中间件功能吗? 我想查看app.get可以接受的参数,但是如前所述,我在文档中找不到它。
Antoine asked 2020-02-29T09:12:49Z
2个解决方案
76 votes
考虑以下示例:
var middleware = {
requireAuthentication: function(req, res, next) {
console.log('private route list!');
next();
},
logger: function(req, res, next) {
console.log('Original request hit : '+req.originalUrl);
next();
}
}
现在,您可以使用以下代码添加多个中间件:
app.get('/', [middleware.requireAuthentication, middleware.logger], function(req, res) {
res.send('Hello!');
});
因此,从上面的代码中,您可以看到“ requireAuthentication”和“ logger”是添加的两个不同的中间件。
39 votes
这并不是说“无限”,而是说您可以在此处添加多个中间件功能(在文档中称为“回调”):
router.METHOD(path,[callback,...]回调)
...
您可以提供多个回调,并且所有回调都被同等对待,并且其行为与中间件相同,只是这些回调可以调用next('route')绕过其余的路由回调。 您可以使用此机制在路由上执行前提条件,然后在没有理由继续进行匹配的路由时将控制权传递给后续路由。
如您所见,中间件功能和通常处理请求的功能(通常是添加到列表中的最后一个功能)之间没有区别。
拥有10个不是问题(如果您确实需要)。