所有控制器的sailsjs动态路由

时间:2016-01-01 11:30:54

标签: node.js dynamic yii routing sails.js

我是面对路由问题的 sailsjs 的新人 我记得在我的应用程序中的地址,以便控制我的创作:

'r|^/events/(\\d+)$|id': "eventsController.view",
'r|^/notifications/(\\d+)$|id': "notificationsController.view"

我过去在框架中使用Yii 在php中使用正则表达式可以返回以下路由:

'<controller:\w+>/<id:\d+>/' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>/' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>/' => '<controller>/<action>'

我想在实现sailsjs中使用yii路由系统

1 个答案:

答案 0 :(得分:1)

对于您指定的模式,您无需编写正则表达式。

假设您的网址只有两个动态部分(最后两个组件),您可以使用以下内容:

'/:param1/:param2': 'MyController.action'

将接受您提供的网址,并允许访问&#34;通知&#34; /&#34;活动&#34;作为req.param('param1'),ID为req.param('param2')

要保持第二个参数可选,您可以使用:
'/:param1/:param2?': 'MyController.action'

对于正则表达式版本,请使用:
'r|^/(events|notifications)/(\\d+)$|page,id': 'MyController.action'

修改
对于基本的蓝图用法:
'r|^/(\\w+)/(\\d*)/(\\w*)$|model,id,action': 'AuthController.action'

(我在这里只考虑了页面,ID和操作;您可以添加其他相关参数。)

然后,在你的控制器中:

var model = req.param('model')
, id = req.param('id')
, action = req.param('action');
sails.models[model][action]({ id: id }).exec(callback);

您可以根据自己的要求进行修改。请注意,您需要彻底验证输入(检查模型是否存在,操作是否有效等等)。

那就是说,你应该认真考虑不要走这条路,因为蓝图已经为你做了这件事。 (甚至支持复数!)考虑将通用逻辑抽象到服务中并从单个控制器调用它。