在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。