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

Share a generic controller across views in 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' 变量无效,它只是为了展示我想要实现的目标。)

我怎样才能实现这样的目标?

你可以通过路由发送一个参数:

 '/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
 });

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

/first/page1

/another/page2

/last/page3

编辑

您还可以将您的页面连同 slug 名称一起存储在数据库中,然后执行如下操作:

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

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

如果它的多层路线可以使用

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