【问题标题】:What does app.engine() do ? And what are ext and callback?app.engine() 做什么?什么是ext和callback?
【发布时间】:2018-08-20 12:39:30
【问题描述】:

我尝试阅读文档,他们说

app.engine(ext, 回调)

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

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

【问题讨论】:

    标签: node.js express web-development-server


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      简单来说:ext - 扩展,回调 - 将呈现具有给定扩展名的文件的库(引擎)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-21
        • 1970-01-01
        • 2014-04-29
        • 1970-01-01
        • 2011-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多