我使用 EJS我的 Node.js 和 Express 应用程序中的模板引擎,到目前为止已经使用了它的功能和渲染,到目前为止还没有遇到任何问题。
但是,虽然我总是在服务器端程序中使用语法 res.render(filename, options, callback)
来呈现文件的内容,但我想知道 res.render()
和 ejs.render()
。
看起来这两种方法都将渲染文件名作为第一个参数,并将要嵌入到文件中的对象作为第二个参数(如 {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 来呈现 View ,则不需要直接使用 EJS。只需确保将它列为 package.json
中的依赖项,Express 将处理其余部分!
这里有一些更多的细节:
调用 ejs.render()
或 ejs.renderFile()
绕过 Express View 引擎。实际上,这意味着您必须提供 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()
中的回调参数用于支持需要异步返回的 View 引擎。 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());
关于javascript - Node.js 和 Express 应用程序中的 res.render() 和 ejs.render() 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22921448/