Node.js和Express应用程序中的res.render()和ejs.render()有什么区别



我在 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()

最新更新