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

标签 javascript node.js express ejs

我使用 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/

相关文章:

javascript - 使用音频元素的 play 方法作为 setTimeout 的回调,为什么不呢?

javascript - 如何使用 JavaScript 将表单数据发送到服务器

javascript - Http 请求在 Node.JS 中不起作用?

node.js - Firebase 监听器占用大量内存

javascript - Express.js 代码上的 Windows 脚本宿主错误 800A03EA

node.js - 如何从 POST 正文获取 wav 文件并使用 Node JS/Express 上传

javascript - 注释掉 <script> 结束标记。语法好不好?

javascript - 当鼠标位于固定 div 之上时滚动底层 div 的方法?

javascript - 为对象分配/取消分配类

mysql - 将 'crypto'模块生成的哈希值保存到mysql