I use EJS https://github.com/visionmedia/ejs我的 Node.js 和 Express 应用程序中使用了模板引擎,并且到目前为止已经使用了它的功能和渲染,并且到目前为止还没有出现任何问题。
然而,虽然我总是使用语法res.render(filename, options, callback)
在我的服务器端程序中呈现文件的内容,我想知道有什么区别res.render()
and ejs.render()
.
看起来这两种方法都将渲染文件名作为第一个参数,并将对象嵌入到文件中作为第二个参数(例如{title: "title here"}
). res.render()
可以将回调函数作为第三个(可选)参数,每当我想使用嵌套渲染时我都会使用它,但从 EJS Github 存储库的文档来看,它可能无法接受回调函数,同样,至少 Github 存储库中的文档不接受该参数(尽管它的参数无论如何都是可选的)。
所以我想知道,有什么区别res.render()
and ejs.render()
。要是res.render()
可以采用第三个参数,使用的意义何在ejs.render()
?或者有什么东西可以ejs.render()
可以用那个res.render()
不能?一般来说,我应该在我的应用程序中使用哪个功能?
我写的是app.set('view engine', 'ejs');
在我的应用程序中使用 EJS 供您参考。
Use res.render()
.
如果您已经使用 Express 来渲染视图,则不需要直接使用 EJS。只需确保您将其列为依赖项package.json
剩下的事情由 Express 来处理!
以下是更多详细信息:
Calling ejs.render()
or ejs.renderFile()
绕过 Express 视图引擎。实际上,这意味着您必须提供 EJS 的绝对路径,并且必须将渲染的 HTML 发送到客户端。
This:
app.get('/', function (req, res) {
res.render('index.ejs');
});
相当于这样:
app.get('/', function (req, res) {
res.send(ejs.renderFile(__dirname + '/views/index.ejs'));
});
回调参数中res.render()
是否支持需要异步返回的视图引擎。 EJS用途fs.readFileSync
渲染它的模板ejs.render()
and ejs.renderFile()
不需要回调——它们只返回渲染的 HTML。
我能想到的一种可能直接使用 EJS 的场景是,如果您想将模板“编译”为稍后可以调用的函数:
var ejs = require('ejs'),
read = require('fs').readFileSync;
var template = ejs.compile(read('path/to/template.ejs', 'utf-8'));
console.log(template());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)