首页 > 解决方案 > app.engine() 做什么?什么是ext和callback?

问题描述

我尝试阅读文档,他们说

app.engine(ext, 回调)

将给定的模板引擎回调注册为 ext 默认情况下,将 require() 基于文件扩展名的引擎。例如,如果您尝试渲染“foo.jade”文件,Express 将在内部调用以下内容,并在后续调用中缓存 require() 以提高性能。

我很难弄清楚这里的 ext 和 callback 是什么意思。

标签: node.jsexpressweb-development-server

解决方案


这是Express的视图/模板引擎 功能的一部分。很多时候,您的请求处理程序只返回一些 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是一个集成了很多视图引擎的包。

但是,如果您想了解此功能的作用,请查看为 Express 开发模板引擎。参数callback必须看起来像. 只是用于渲染的磁盘文件的名称,因此在上面的示例中。是标准节点回调,在错误或成功时调用。是从 传入的对象。然后由您决定如何根据提供的参数实际进行渲染。function(filePath, options, callback)filePathindex.jadecallbackcallback(err)callback(null, renderedContent)optionsreq.render('index.jade', /* options */ { title: 'foo', content: 'bar' })


推荐阅读