app.engine() 的作用是什么?ext 和callback 是什么?

Cha*_*ing 2 web-development-server node.js express

我尝试阅读文档,他们说

应用程序引擎(扩展,回调)

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

我很难弄清楚 ext 和回调在这里到底意味着什么。

Hor*_*man 5

这是 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). filePath只是用于渲染的磁盘文件的名称,因此index.jade在上面的示例中。callback是一个标准节点回调,callback(err)在出错或callback(null, renderedContent)成功时调用。options是从 传入的对象req.render('index.jade', /* options */ { title: 'foo', content: 'bar' })。然后由您决定如何根据提供的参数实际进行渲染。