我有一个简单的应用程序,在node.js和express的帮助下构建。这个应用程序有多个路由和基本的登录/注销机制。如果用户未登录,我希望所有路由都重定向到登录表单。这可以通过将auth checker行插入每个路由文件来完成。
问题是: 是否可以链接路由以通过登录检查路由推送所有请求,然后将其传递给请求的路由而不向现有路由文件写入任何内容?
E.g。现有路线是“/”,“/ upload”,“/ login”,“/ logout”。 我希望获取或发布“/ upload”的请求首先由“/ login”路由处理,然后通过“上传”路由处理。
答案 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)
此处ensureAuthenticated
和housekeeping
不会发送回复,只需致电next()
。最后一个返回结果页面。
请注意您需要的处理程序与登录时使用的处理程序不同。登录页面将进行身份验证,其余页面应检查用户是否经过身份验证。如果你正在使用会话,那么差异很明显。
路由处理程序的args与中间件的args相同。那些是:
上面的一个微不足道的变化是next
如果它是你想要的回调链中的结束函数,就可以省略。除了这些,你不能有其他的args。您可以看到它们的名称here(第154行)。
路由包括方法,路由匹配和回调数组。与中间件一样,回调链按顺序执行特定路由,直到返回响应或抛出错误。