在快递链接的路线

时间:2013-12-18 06:24:20

标签: node.js express routes

我有一个简单的应用程序,在node.js和express的帮助下构建。这个应用程序有多个路由和基本的登录/注销机制。如果用户未登录,我希望所有路由都重定向到登录表单。这可以通过将auth checker行插入每个路由文件来完成。

问题是: 是否可以链接路由以通过登录检查路由推送所有请求,然后将其传递给请求的路由而不向现有路由文件写入任何内容?

E.g。现有路线是“/”,“/ upload”,“/ login”,“/ logout”。 我希望获取发布“/ upload”的请求首先由“/ login”路由处理,然后通过“上传”路由处理。

1 个答案:

答案 0 :(得分:2)

是的,您可以在路线中链接处理程序。您的处理程序定义应该类似于

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()。最后一个返回结果页面。

请注意您需要的处理程序与登录时使用的处理程序不同。登录页面将进行身份验证,其余页面应检查用户是否经过身份验证。如果你正在使用会话,那么差异很明显。


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

  1. (错误,req,res,next)错误处理程序
  2. (req,res,next)非错误处理程序
  3. 上面的一个微不足道的变化是next如果它是你想要的回调链中的结束函数,就可以省略。除了这些,你不能有其他的args。您可以看到它们的名称here(第154行)。

    路由包括方法,路由匹配和回调数组。与中间件一样,回调链按顺序执行特定路由,直到返回响应或抛出错误。