【问题标题】:sailsjs dynamic routing for all controllers所有控制器的sailsjs动态路由
【发布时间】:2016-01-01 11:30:54
【问题描述】:

我是sailsjs的新手,遇到路由问题
当我在我的应用程序中将我的地址设置为以下以控制我的创作时,我会记住:

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

我以前在framework Yii中工作,在php中使用正则表达式可以返回如下路由:

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

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

【问题讨论】:

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


【解决方案1】:

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

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

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

这将接受您提供的 URL,并允许以 req.param('param1') 访问“通知”/“事件”,以 req.param('param2') 访问 id。

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

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

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

(我这里只考虑了page、id和action;你可以添加其他相关参数。)

然后,在你的控制器中:

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

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

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

【讨论】:

  • 对我来说没用,因为我的控制器是动态的,我需要为所有控制器创建路由以在所有控制器中显示“查看操作”
  • @Morteza:查看编辑。您可以缩小范围以仅支持您需要的 view 操作。
猜你喜欢
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
  • 2020-10-22
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多