在ExpressJS中为特定的路由链接多个中间件
我只想validation一些东西,但在Express文档或在线上找不到任何东西(虽然我知道这是一个function)。
我可以testing这个,但我真的没有一个很好的模板,并希望听到来自社区。
如果我像这样expression一条路线:
app.get('/', function (req, res) { res.send('GET request to homepage'); });
我也可以定义一个中间件并直接加载它,比如
middleware = function(req, res){ res.send('GET request to homepage'); }); app.get('/', middleware)
但是,我也可以链接至less一个这样的路由来运行额外的中间件,比如authentication,就像这样:
app.get('/', middleware, function (req, res) { res.send('GET request to homepage'); });
这些是无限可链接的吗? 如果我想要,可以在给定的路线上粘贴10个中间件function吗? 我想看看app.get可以接受的参数,但是像上面提到的我无法在文档中find它。
这并不是说“无限”,而是说你可以在这里添加多个中间件function(在文档中称为“callback” ):
router.METHOD(path,[callback,…]callback)
…
你可以提供多个callback函数 ,并且所有的callback函数都是平等对待的,除了这些callback函数可能会调用next('route')来绕过剩余的callback函数之外,其他行为都像中间件一样。 您可以使用此机制在路线上执行前提条件,然后在没有理由继续匹配路线时将控制权传递给后续路线。
正如你所看到的,中间件函数和通常处理请求的函数(通常是添加到列表中的最后一个函数)之间没有区别。
有10个不应该是一个问题(如果你真的需要)。
考虑下面的例子
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”是两个不同的中间件的join。