2017-09-29 79 views
0

今天我在这里不只是检查好的答案,但问! 我想要做的使用Sails.js及其routes.js如下:Sails.js自定义路由与相同的控制器,但不同的布局

My problem picture

我想是基于已登录用户的类型实际上提供不同的布局,我知道如何做到这一点,但我不想写这篇文章的routes.js文件(因为它是凌乱的,我不希望创建控制器做路由本身的工作):

'get /adminSpace/*' : { 
    controller : 'adminSpace' //setting layout on controller 
}, 
'get /userSpace/*' : { 
    controller : 'userSpace' // //setting layout on controller 
} 

的快速方法,如果可能的话,会这样写:

'get /[user|admin]/projects/*' : { 
    controller : 'project' 
    locals: { 
     layout: 'based_on_url' 
}} 

这是可能的吗?

+0

只是要清楚,我不想添加中间人式的AdminSpaceController和UserSpaceController来设置布局!然后专门为每个角色分配每个控制器url。有小费吗? – paulogdm

+0

风帆路线可以做一些非常棘手的东西:http://sailsjs.com/documentation/concepts/routes/custom-routes但我的直觉告诉我,为什么不用你的控制器?我不确定在路线文件中设置的本地人是否可以访问从路线本身或其他动态数据中抽取的通配符(如[user | admin]等)。 – arbuthnott

+0

我也觉得两条路线可能会更简单!其他开发人员在查看代码时可以更快地理解两条路线,而不必解开用于将正则表达式放入路线的有趣语法。 – arbuthnott

回答

0

好吧,我想我正在阅读你想要的基于评论 - 你想为正常和管理员用户的不同行为。您的代码可以在您的routes.js文件和views文件中处理,但您希望管理员忽略差异 - 他们可以做到这一点,而不必检测“管理员vs正常”。

你可以做到这一点通过在指向同一个控制器的两个不同的路线设置当地人:在您的UserController

'GET /adminSpace/*' : { 
    controller : 'UserController', 
    locals: { 
     admin: true, 
     _layoutFile: 'admin' 
    } 
}, 
'GET /userSpace/*' : { 
    controller : 'UserController', // same as above 
    locals: { 
     admin: false, 
     _layoutFile: 'user' 
    } 
}, 

然后:

someAction: function(req, res) { 
    // any logic needed 
    // can access sails.locals.admin if necessary, but do not have to 
    return res.view(); // will use admin.ejs or users.ejs as set in route 
} 

在您看来,在路由设置当地人仍然可以访问,并且如果需要,您可以在控制器中添加额外的本地人员。希望这是你正在寻找的!

+0

我可以与之合作。谢谢! – paulogdm

相关问题