【发布时间】:2014-07-20 19:06:35
【问题描述】:
我的应用程序由 3 条路由(api、admin、默认)构成。每个人都住在自己的文件中,并拥有自己的中间件并导出一个路由。我面临的问题是当我想转发到另一个位于不同路由器上的路由时。本质上,我想调用相同的函数,这样我就不会从多个位置提供相同的视图。
我不想使用 res.redirect('/someplace') 因为我希望能够将 req 和 res 对象传递给方法。
|-app.js
|-routes
|---admin.js
|---api.js
|---default.js
路由是必需的,在app.js中使用如下
app.use('/api', require('./routes/api')(passport);
app.use('/admin', require('./routes/admin')(passport);
app.use('/', require('./routes/default')(passport);
如果有需要重定向登录并传递一些数据的情况,在管理员内部
// authenticates all routes for the admin router
router.use(function(req, res, next){
if(req.isAuthenticated()){
return next();
}
res.flashMessage.push('Session expired'); //is lost after redirect
res.redirect('/login');
//do I need to restructure my whole app so that I don't
//have to call res.redirect('login')
});
关于如何构建它的任何想法?我是否需要导出每种方法并将所有路由保存在一个路由器文件中?这不是很干净,但如果函数在其他地方,它可能太乱了。
【问题讨论】:
-
如果您想从服务器端更改 URL,您将不得不将它们重定向出来并重新输入(这会丢失 req/res)。您是否考虑过根据 URL 参数是否存在在登录页面上显示消息?例如,如果用户直接导航到
/login,他们看不到消息,但如果他们被重定向到那里,则将原始 URL 作为 URL 参数包含在内,如果存在,则显示消息。