我在我的Node.js和Express应用程序中使用EJS模板引擎,到目前为止已经使用了它的功能和渲染,到目前为止还没有任何问题。
然而,虽然我总是在服务器端程序中使用语法res.render(filename, options, callback)
来呈现文件的内容,但我想知道res.render()
和{{1}之间的区别是什么? }。
看起来两种方法都将渲染文件名作为第一个参数,将Object作为第二个参数嵌入到文件中(如ejs.render()
)。 {title: "title here"}
可以将回调函数作为第三个(可选)参数,并且每当我想使用嵌套渲染时我都会使用它,但是从EJS Github存储库的文档中,它可能不是能够接受回调函数,至少Github存储库中的文档不会接受参数(尽管它的参数无论如何都是可选的)。
所以我想知道res.render()
和res.render()
之间的区别是什么。如果只有ejs.render()
可以采用第三个参数,那么使用res.render()
的重点是什么?或ejs.render()
可以使用ejs.render()
无法使用的任何内容?一般来说,我应该在我的应用程序中使用哪种功能?
我写res.render()
以在我的应用中使用EJS以获取您的信息。
答案 0 :(得分:17)
使用res.render()
。
如果您已经使用Express渲染视图,则不需要直接使用EJS。只需确保将其列为package.json
中的依赖项,Express将负责其余工作!
以下是更多细节:
调用ejs.render()
或ejs.renderFile()
会绕过Express视图引擎。实际上,这意味着您必须提供EJS的绝对路径,并且必须将呈现的HTML发送给客户端。
此:
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()
和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());
答案 1 :(得分:3)
这对我来说有点信息,因为我不熟悉ejs
。但是我遇到了一个我没有res
变量的情况。例如,我需要发送一封带有html模板的电子邮件。所以在这个用例中,我发现我们只能ejs.render()
使用模板发送电子邮件。因此,ejs.render()
对res.render()
很重要。