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

2024-04-24

I use EJS https://github.com/visionmedia/ejs我的 Node.js 和 Express 应用程序中使用了模板引擎,并且到目前为止已经使用了它的功能和渲染,并且到目前为止还没有出现任何问题。

然而,虽然我总是使用语法res.render(filename, options, callback)在我的服务器端程序中呈现文件的内容,我想知道有什么区别res.render() and ejs.render().

看起来这两种方法都将渲染文件名作为第一个参数,并将对象嵌入到文件中作为第二个参数(例如{title: "title here"}). res.render()可以将回调函数作为第三个(可选)参数,每当我想使用嵌套渲染时我都会使用它,但从 EJS Github 存储库的文档来看,它可能无法接受回调函数,同样,至少 Github 存储库中的文档不接受该参数(尽管它的参数无论如何都是可选的)。

所以我想知道,有什么区别res.render() and ejs.render()。要是res.render()可以采用第三个参数,使用的意义何在ejs.render()?或者有什么东西可以ejs.render()可以用那个res.render()不能?一般来说,我应该在我的应用程序中使用哪个功能?

我写的是app.set('view engine', 'ejs');在我的应用程序中使用 EJS 供您参考。


Use res.render().

如果您已经使用 Express 来渲染视图,则不需要直接使用 EJS。只需确保您将其列为依赖项package.json剩下的事情由 Express 来处理!

以下是更多详细信息:

Calling ejs.render() or ejs.renderFile()绕过 Express 视图引擎。实际上,这意味着您必须提供 EJS 的绝对路径,并且必须将渲染的 HTML 发送到客户端。

This:

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() and 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());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 使用 Node.JS 客户端库插入 Google Analytics 内容实验

    我正在尝试使用 Node js 客户端库配置内容实验 但无法计算出语法 我应该将主体 实验资源 放置在哪里 如此处所述 https developers google com analytics devguides config mgmt
  • 在哪里声明类常量?

    我使用类成员来保存常量 例如 function Foo Foo CONSTANT1 1 Foo CONSTANT2 2 这工作得很好 除了它看起来有点无组织 所有代码都特定于Foo遍布全球范围 所以我考虑将常量声明移到内部Foo 声明 但是
  • 是否可以实现异步跨域文件上传?

    有可能的 参见下文 首先我用这张图来解释一下异步文件上传可以实现 对不起 我已经关闭了我的一个域 该图像现在消失了 不过 这确实是一个很好的图像 这是在我发现 Stack Overflow 可以通过 Imgur 上传图像之前 正如您所看到的
  • Javascript:无法停止setTimeout

    我正在开发一个代理服务器检查器 并使用以下代码使用 setTimeout 函数以大约 5 秒的间隔启动请求 function check var url document getElementById url value var proxy
  • 如何使用 Material UI 制作一个圆形复选框?

    我尝试匹配的设计要求复选框为圆形 我正在使用 Material UI 和 React 边框半径不起作用 因为实际图标的边框不是可见复选框的边框 我不能只使用像 Font Awesome 这样的东西 因为它需要实际检查和取消检查 Curren
  • 使用HTMLWebpackPlugin时如何通过webpack加载图片?

    我正在使用 HTMLWebpackPlugin 在我的模板中我有一个 img 标签 img src images logo png 如果您注意到 这里我使用相对路径 认为 webpack 将触发在 webpack config js 文件中
  • Vagrant 提供,无法启动 grunt

    我正在尝试让 vagrant 安装 nodejs 正常运行所需的所有内容 然后在节点项目的根文件夹上执行 nohup grunt server 之后 我期望服务器在端口 3030 上侦听 但事实并非如此 如果在配置后我这样做 流浪者 ssh
  • CasperJS - 在网站上注册并验证 Gmail 上发送的邮件 - 对于 slimer 和 phantom -

    Edit 这是windows的行为 linux就失败了 首先 如果您使用 casper 成功导航 gmail 没有随机等待时间 从 20 秒到 5 分钟 请告诉我 我想在我们的网站上注册 然后使用 Gmail 自动验证我的注册 整个注册步骤
  • 属性列表后缺少 jquery 验证 }

    我这里有这个代码 order validate rules name required true lastname required true address required true telephone required true di
  • Raphael JS 中的动画字体大小是否有流畅的过渡可能性?

    到目前为止似乎它不流畅 但波涛汹涌 例如 如果您有一个 font size 14 的状态属性 并且想要以动画方式显示 font size 16 的状态 则过渡看起来并不平滑 它分两步跳跃 首先更改为 15 然后更改为 16px 可以强迫它看
  • 如何在node-mysql查询后获取警告

    如何获取查询执行后识别的相应警告 如下所示 connection query squery function err rows search for OkPacket in 2 dimension array var warningCoun
  • Chrome 扩展允许的键盘快捷键

    当您创建 Chrome 浏览器扩展程序时 您可以通过实现来建议键盘快捷键chrome 命令 https developer chrome com extensions commandsAPI 是否有允许的组合键的记录列表 Chrome 似乎
  • jQuery Deferred - 向 Deferred 合约添加回调

    我正在尝试在现有 Deferred 的状态设置为成功之前向其合约添加另一个异步调用 不要尝试用英语解释这一点 请参阅以下伪代码 when ajax url someUrl data data async true success funct
  • Socket.io 不断重复连接并忽略其他事件

    我正在尝试制作一个网络应用程序 用户可以在其中互相玩环形国际象棋 这是我的 app js 在服务器上 var express require express var app express var http require http Ser
  • 如何在 PHP、HTML 表单和 Javascript 之间传递布尔值

    我有一个 PHP 程序 它使用 HTML 表单并使用 JavaScript 进行验证 HTML 表单中有一个隐藏字段 其中包含一个布尔值 该值由 PHP 设置 由 JavaScript 在提交时进行验证 然后传递到另一个 PHP 页面 当我
  • 是否可以使用 JavaScript 检查加载的图像大小

    这是一个完全愚蠢的问题 但我只是想澄清我的疑问 当图像加载时 我们可以使用以下命令检查加载状态onload or oncomplete事件 但我只是想知道有多少部分图像是使用 JavaScript 加载的 真的可能吗 我的问题是 我们可以从
  • 使用 JavaScript 在空闲时隐藏鼠标光标

    是否可以使用JavaScript来设置cursor属性的属性none如果鼠标在一定时间内处于非活动状态 例如五秒 请将其设置回auto当它再次活跃时 EDIT 我意识到none不是有效值cursor财产 尽管如此 许多网络浏览器似乎都支持它
  • MutationObserver 不适合儿童

    提前为可能是一个简单的问题和下面令人震惊的 javascript 道歉 我的问题如下 网站上有一个横幅 每隔几秒钟就会显示四个图像 我正在尝试将 印象 推入数据层以供 GTM 拾取 为了显示下一个图像 我们 不是我自己 将下一个横幅图像的
  • 如何从 Firebase 实时数据库中删除具有 UID 的用户?

    数据库结构如下所示 LGw89Lx5CA9mOe1fSRQ uid FzobH6xDhHhtjbfqxlHR5nTobL62 image https pbs twimg com profile images 8950378298 locat
  • jQuery fullCalendar + Fancybox 弹出窗口编辑事件

    我正在使用此代码在 fullCalendar 上生成事件

随机推荐