路线链接快递

我有一个简单的应用程序,build立在node.js和express的帮助下。 这个应用程序有多个路线和基本的login/注销机制。 我想要所有的路由来检查使用是否已经login,否则 – redirect到login表单。 这可以通过在每个路由文件中插入auth检查器行来完成。

问题是:是否有可能链路由推送所有请求通过login检查器路由,然后将其传递到所请求的一个,而不写任何东西到现有的路由文件?

例如现有的路由是“/”,“/ upload”,“/ login”,“/ logout”。 我希望获取发布 “/ upload”的请求首先由“/ login”路由处理,然后通过“upload”路由处理。

是的,你可以在一条路线上连锁处理程序。 你的处理程序定义应该像

routehandler(req, res, next){ //send response directly //or call next to call the next handler } 

然后你可以按照你想要的顺序放置多个处理程序:

 app.get('/server', ensureAuthenticated, housekeeping, routes.server.get) 

这里ensureAuthenticatedhousekeeping不发送响应next() 。 最后一个返回结果页面。

请参阅您将需要一个不同于您用于login的处理程序。 login页面将执行身份validation,rest页面应该检查用户是否通过身份validation。 如果你正在使用会话,那么区别就很明显了。


路由处理程序的参数与中间件的参数相同。 那些是 :

  1. (err,req,res,next)error handling程序
  2. (req,res,next)非error handling程序

上面的一个微不足道的变化是,如果它是你想要的callback链中的最终function,则可以忽略next 。 你不能有其他的参数。 你可以在这里看到他们是如何被调用的(第154行)。

路由由方法,路由匹配和callback数组组成。 与中间件一样,callback链按顺序执行特定的路由,直到返回响应或引发错误。