这是 Express 的 视图/模板引擎 functionality 的一部分。很多时候,您的请求处理程序只返回一些 JSON 对象。但有时您想构建一个常规的“文档”,例如完全构建的 HTML 页面或 RSS 提要等。模板引擎可以帮助您实现这一目标,尽管它们绝不是强制性的。您可以使用其他方法(例如,如果您喜欢这种痛苦,可以手动构建字符串),或者您可以手动使用诸如 pug/moustache 之类的库。视图引擎功能基本上将 pug/moustache 等库集成到 express 中,因此使用起来更容易。
链接页面有一个很好的例子来说明如何在实践中使用它:
然后创建一个路由来渲染 index.pug 文件。如果未设置视图引擎属性,则必须指定视图文件的扩展名。否则,您可以省略它。
app.get('/', function (req, res) {
res.render('index', { title: 'Hey', message: 'Hello there!' })
})
当您向主页发出请求时,index.pug 文件将呈现为 HTML。
很多时候express知道各种模板引擎。所以说express.set('view engine', 'pug')就够了,只要安装了pug包就可以做正确的事了。
其他时候你需要使用app.engine 来更明确地告诉它要做什么。它被称为app.engine('jade', require('jade').__express)。第一个参数只是 express 应该寻找的扩展名。所以当你说req.render('index', ...) 它会寻找一个index.jade 文件。第二个参数是实际上在视图引擎(正如我所说,它与 express 是分开的)和 express 之间进行集成的函数。 consolidate.js 是一个集成了很多视图引擎的包。
但是,如果您想了解此功能的作用,请查看 developing template engines for Express。 callback 参数必须类似于 function(filePath, options, callback)。 filePath 只是用于渲染的磁盘文件的名称,因此在上面的示例中为 index.jade。 callback 是标准节点回调,在错误时调用为callback(err),在成功时调用为callback(null, renderedContent)。 options 是从 req.render('index.jade', /* options */ { title: 'foo', content: 'bar' }) 传入的对象。然后由您决定如何根据提供的参数实际进行渲染。