res.view()
以 HTML 页面进行响应。
return res.view(pathToView, locals);
或者
return res.view(pathToView);
return res.view(locals);
return res.view();
使用已配置的视图引擎将位于pathToView
的视图模板编译成 HTML。如果未提供pathToView
,则根据当前控制器和操作提供常规视图。
指定的locals
与您配置的应用程序范围的本地变量以及 Sails 和/或您的视图引擎的某些内置本地变量合并,然后作为数据传递给视图引擎。
参数 | 类型 | 详情 | |
---|---|---|---|
1 | pathToView | 所需视图文件相对于应用程序的views 文件夹(通常为views/ )的路径,不带文件扩展名(例如.ejs ),也不带尾部斜杠。默认为“identityOfController/nameOfAction”。 |
|
2 | locals | 传递给视图模板的数据。这些显式指定的本地变量将合并到 Sails 的内置本地变量和您配置的应用程序范围的本地变量中。 默认为 {} 。 |
考虑一个传统配置的 Sails 应用程序,其中在其OvenController.js
的cook()
操作中调用了res.view()
。
如果没有pathToView
参数,res.view()
将通过组合控制器的标识(oven
)和操作的名称(cook
)来确定路径。
return res.view();
// -> responds with `views/oven/cook.ejs`
以下是如何使用显式pathToView
加载相同视图的方法
return res.view('oven/cook');
// -> responds with `views/oven/cook.ejs`
最后,这是一个更复杂的示例,演示了如何将res.view
与 Waterline 查询结合使用。
// Find the 5 hottest oven brands on the market
Oven.find().sort('heat ASC').exec(function (err, ovens){
if (err) return res.serverError(err);
return res.view('oven/top5', {
hottestOvens: ovens
});
// -> responds using the view at `views/oven/top5.ejs`,
// and with the oven data we looked up as view locals.
//
// e.g. in the view, we might have something like:
// ...
// <% _.each(hottestOvens, function (aHotOven) { %>
// <li><%= aHotOven.name %></li>
// <% }) %>
// ...
});
- 此方法是终端方法,这意味着它通常是应用程序对给定请求运行的最后一行代码(因此在这些文档中建议使用
return
)。res.view()
从磁盘读取视图文件,将其编译成 HTML,然后将其流回客户端。如果您已经在内存中拥有视图,或者不想将编译后的 HTML 直接流回客户端,请改用sails.hooks.views.render()
。res.view()
始终查找视图文件名的小写版本。例如,如果您的控制器是FooBarController
,您的操作是Baz
,res.view()
将尝试查找views/foobar/baz.ejs
。在区分大小写的文件系统(例如 Ubuntu Linux)上,如果视图以大写字母保存,则在查找视图时可能会导致意外错误。因此,建议您始终以小写形式保存视图和视图文件夹。