javascript - 在 sails js 中跨 View 共享通用 Controller

标签 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'
  },  

所以有一组通用页面可以共享同一个 Controller - 没有必要让这些页面都有一个唯一的 Controller ,因为它们会做同样的事情,只是加载不同的 View 并从模型加载不同的数据取决于请求的页面。

因此,我需要将 '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'
  }, 

在你的 Controller 中:

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

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

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

/first/page1

/另一个/page2

/last/page3

编辑

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

'/:slug': { Controller :'页面 Controller ', Action :'viewPage', },

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

如果它的多层路由你可以使用

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

关于javascript - 在 sails js 中跨 View 共享通用 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29539762/

相关文章:

javascript - Sync-gateway 返回此错误 401 Login required 是什么意思?

javascript - 是否可以使异步函数返回 Mongoose 查询而不是 promise ?

javascript - NextJS 部署到特定的 URL 路径

node.js - 无法使用 map() 和 async-await 将项目推送到数组

node.js - 我可以限制 Node.js/express.js 中 TLS 消息的长度吗?

javascript - 构建一个中等复杂度的 Node 下载模块

javascript - 线性插值在经典柏林噪声中如何工作?

javascript - 触发 dayClick of fullCalendar with agendaDay view

node.js - 在 MEAN.js 堆栈中,我可以在哪里配置 jshint 警告?

node.js - Express 中的 express.static 是什么?