繁体   English   中英

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

[英]What's the difference between res.render() and ejs.render() in Node.js and Express app

我在我的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()不能? 一般来说,我应该在我的应用程序中使用哪个功能?

我写了app.set('view engine', 'ejs'); 在我的应用程序中使用EJS来获取您的信息。

使用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());

这对我来说有点信息,因为我不熟悉ejs 但是我遇到了一个我没有res变量的场景。 例如,我需要发送一封带有html模板的电子邮件。 所以在这个用例中,我发现只有ejs.render()才能使用模板发送电子邮件。 因此, ejs.render()作为res.render()非常重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM