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