从多个模型生成视图的控制器的约定

Convention for a controller that generates a view from several models

在Sails.js中,针对可以呈现视图的控制器方法设置了路由。在大多数情况下,这很简单,即您可以设置指向 UserController.findGET /users 路由(无论如何通常都会自动设置)。

但是,假设博客的主页呈现主要部分中的 10 篇最新帖子和一个包含作者和类别列表的列。控制器方法必须在呈现视图并将其发送回客户端之前获取帖子、作者和类别。显然,像这样的方法并不真正属于 PostControllerAuthorControllerCategoryController.

在这种情况下最好的办法是什么?创建一个控制器来呈现依赖于来自多个模型的数据的视图?这样的控制器有什么好听的名字吗?

谢谢!

我会做的(这纯粹是基于意见)是创建一个 PageController 并为您想要的每个页面创建一个操作。

对于您的主页示例,您可以创建一个 home 操作,获取您需要的任何内容,然后使用 res.ok() 呈现它(如果一切正常)。

另一种选择是将 Sails 用作纯 API 并使用 HTTP 请求 (Ajax) 或套接字在 JSON 中获取数据。如果你想这样做,我建议你使用前端框架,例如Angular、Ember、React...

顺便说一下,您还可以在现有控制器中创建呈现 HTML 的动作,并创建一个路由来通过 Ajax 请求命中它们,然后将它们打印在您的页面中。我更喜欢第二种解决方案,因为它充分利用了蓝图 API(您不需要任何新的控制器或操作)。

正如 Yann 指出的那样,这个答案必须有点自以为是。看来您正在使用视图系统而不是构建单页应用程序。对于主页,我会选择带有 home(req, res) 操作的 IndexController.js 文件。

// api/controllers/IndexController.js
module.exports = {
  home: function (req, res) {
    // Retrieve all the information you need
    // Take care about managing the asynchronous calls before rendering the view
    return res.view('homepage');
  }
};

声明路线

// config/routes.js
module.exports.routes = {
  'get /': 'IndexController.home'
}

views/homepage.ejs 中创建视图。