在sails js中跨视图共享通用控制器

时间:2015-04-09 13:23:42

标签: javascript node.js express sails.js

我想在routes.js文件

中进行以下设置
  '/first': {
    controller: 'PageController',
    action: 'viewPage',
    page: 'first'
  },
  '/another': {
    controller: 'PageController',
    action: 'viewPage',
    page: 'another'
  },
  '/last': {
    controller: 'PageController',
    action: 'viewPage',
    page: 'last'
  },  

因此,有一组通用页面可以共享同一个控制器 - 这些都不需要这些控件,因为它们会做同样的事情,只需加载不同的视图并加载不同的模型中的数据取决于请求的页面。

因此,我需要将路由提供商之类的'page'变量传递给PageController,然后我可以在PageController.viewPage中执行此操作。 (我意识到上述路线文件中的'page'变量无效,它只是为了展示我想要实现的目标。)

我怎样才能达到这样的目标?

1 个答案:

答案 0 :(得分:3)

您可以在路线上发送参数:

 '/first/:page': {
    controller: 'PageController',
    action: 'viewPage',
    page: 'first'
  },
  '/another/:page': {
    controller: 'PageController',
    action: 'viewPage',
    page: 'another'
  },
  '/last/:page': {
    controller: 'PageController',
    action: 'viewPage',
    page: 'last'
  }, 

在您的控制器中:

 var page = req.param('page');

 res.view('index/' + page, { // Where page is the page parameter and name of your page.
    stuff: stuff
 });

现在您可以像这样调用端点页面:

/第一/第1页

/另一/第2页

/最后/ PAGE3

修改

您还可以将页面与slug名称一起存储在数据库中,并执行以下操作:

'/:slug': { controller: 'PageController', action: 'viewPage', },

然后使用req.param('slug');从数据库中查询您的页面数据,以便为视图加载正确的数据。

如果是多层路线,您可以使用

/*然后req.route将包含您的查找。