在 Sails 中,视图是标记模板,它们在服务器端编译成 HTML 页面。在大多数情况下,视图用作对传入 HTTP 请求的响应,例如,用于提供您的主页。
更少见的是,您也可以将视图直接编译成 HTML 字符串以在您的后端代码中使用(参见
sails.renderView()
)。例如,您可以使用此方法发送 HTML 邮件,或构建用于与旧版 API 交互的大型 XML 字符串。
默认情况下,Sails 配置为使用 EJS (嵌入式 Javascript) 作为其视图引擎。EJS 的语法非常规范;如果您使用过 php、asp、erb、gsp、jsp 等,您将立即知道自己在做什么。
如果您更喜欢使用其他视图引擎,则有很多选择。Sails 支持所有与 Express 兼容的视图引擎,通过 Consolidate。
视图默认在您的应用的 views/
文件夹中定义,但与 Sails 中的所有默认路径一样,它们是 可配置的。如果您根本不需要提供动态 HTML 页面(例如,如果您正在为移动应用构建 API),您可以从您的应用中删除该目录。
在您可以访问 res
对象的任何地方(例如控制器操作、自定义响应或策略),您可以使用 res.view
编译您的其中一个视图,然后将生成的 HTML 发送给用户。
您还可以将视图直接连接到 routes.js
文件中的路由。只需指示从您的应用的 views/
目录到视图的相对路径即可。例如
{
'get /': {
view: 'pages/homepage'
},
'get /signup': {
view: 'pages/signup/basic-info'
},
'get /signup/password': {
view: 'pages/signup/choose-password'
},
// and so on.
}
如果您正在为浏览器构建 Web 应用程序,则您的导航的一部分(或全部)可能会在客户端进行;即,浏览器不是每次用户导航时都获取新的 HTML 页面,而是客户端代码预加载一些标记模板,然后在用户的浏览器中呈现这些模板,而无需再次直接访问服务器。
在这种情况下,您可以选择以下两种方法来引导单页应用
views/publicSite.ejs
。此选项的优点是,您可以使用 Sails 中的视图引擎将数据从服务器直接传递到将在客户端呈现的 HTML 中。这是一种简单的方法,可以将用户数据等内容传递给您的客户端 JavaScript,而无需从客户端发送 AJAX/WebSocket 请求。assets/index.html
。虽然您无法通过这种方式将服务器端数据直接传递给客户端,但此方法的优点是它允许您进一步解耦应用程序的客户端和服务器端部分。请注意,assets 文件夹中的任何内容都可以移动到静态 CDN(如 Cloudfront 或 CloudFlare),使您可以利用该提供商的地理分布式数据中心,将您的内容更靠近您的用户。