node.js - app.engine() 做什么?什么是ext和callback?
问题描述
我尝试阅读文档,他们说
app.engine(ext, 回调)
将给定的模板引擎回调注册为 ext 默认情况下,将 require() 基于文件扩展名的引擎。例如,如果您尝试渲染“foo.jade”文件,Express 将在内部调用以下内容,并在后续调用中缓存 require() 以提高性能。
我很难弄清楚这里的 ext 和 callback 是什么意思。
解决方案
这是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' })
推荐阅读
- ios - 将分支合并到 master 后的 Xcode 和 git 问题
- javascript - 有没有办法从没有 .dataSync() 的 tensorflow.js 变量中获取值?
- r - 如何停止 slide() 函数将数字向量计算到列表中?
- visual-studio-code - 是否可以指定 PreLaunch 任务的序列和任务完成时的拆卸序列?
- sql - 无法在 SQL 中创建新数据库
- reactjs - 如何区分useEffect是否被路由改变触发
- ruby-on-rails - Rails 6 - Yarn 字体包在生产中不起作用
- sql - 查询第二个查询计数等于 0 的记录
- javascript - 如果满足某些条件则重新加载页面的Javascript函数是无限地重新加载页面
- python - 图像已上传但未保存在媒体和数据库 Django 中