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

时间:2018-08-20 12:39:30

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

我试图通读文档,他们说

  

app.engine(ext,回调)

     

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

我很难弄清ext和callback在这里的含义。

2 个答案:

答案 0 :(得分:2)

这是Express的视图/模板引擎 functionality的一部分。很多时候,您的请求处理程序仅返回一些JSON对象。但是有时您希望构建常规的“文档”,例如完全构建的HTML页面或RSS feed。模板引擎可以帮助您实现这一目标,尽管它们绝不是强制性的。您可以使用其他方法(例如,如果您喜欢痛苦的话,可以手动构建字符串),也可以手动使用诸如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)。第一个参数只是快速快递应寻找的扩展名。因此,当您说req.render('index', ...)时,它将寻找一个index.jade文件。第二个参数是实际上在视图引擎(如我所说的,与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' })传入的对象。然后由您决定如何根据提供的参数来实际执行渲染。

答案 1 :(得分:0)

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