在单个 Node.js + Express 响应中发送图像和 JSON 数据

Posted

技术标签:

【中文标题】在单个 Node.js + Express 响应中发送图像和 JSON 数据【英文标题】:Send image and JSON data in single Node.js + Express response 【发布时间】:2014-02-10 06:33:40 【问题描述】:

我正在使用 Node.js 和 Express 创建一个 Web API,并打算使用单个响应同时返回图像和 JSON 数据。我看到了一个指定标头的解决方案:https://***.com/a/18864738/1703565 但我不想执行两个获取请求。我该如何做到这一点?

【问题讨论】:

【参考方案1】:

您可以将图像编码为 base64 字符串 (http://nodejs.org/api/buffer.html#buffer_buf_tostring_encoding_start_end),并将其作为 JSON 的一部分返回。

【讨论】:

【参考方案2】:

Cookies

您可以将图像作为正常的图像响应正文返回,然后使用相同的请求设置会话 cookie。会话 cookie 将包含 JSON 数据。加载图像后,您可以通过 javascript 从 cookie 中提取 JSON 数据。

这适用于所有浏览器。唯一的限制是您可以返回的 JSON 的大小。最大尺寸看起来是4093 bytes。

图像编码

如果您的 JSON 太大而无法放入 cookie,那么您可以将图像编码为 base64 对象并在 JSON 响应中返回图像数据。

在这种情况下,您必须在画布上重建图像或使用图像数据 url 格式动态创建图像对象,就像 Kevin 评论中的 url 所做的那样。

图像编码的一个缺点是响应的大小增加。粗略地说,base64 编码后的图像大小将比原始图像大小为37% larger。


最终取决于您的具体需求,哪种方法最适合您的要求。

【讨论】:

您不必在画布上重建图像。见bigfastblog.com/embed-base64-encoded-images-inline-in-html 第一个选项对我不起作用,因为这纯粹是移动应用程序使用的 Web API。我什至没有想到第二个选项...大声笑。非常感谢。但是,您确定这是绝对最好的方法吗? @Daniel 非常感谢,我已经找到了解决问题的方法。我不必一起发送图像和数据。我可以在 JSON 中发送图像的 URL,以便客户端可以下载它。干杯

以上是关于在单个 Node.js + Express 响应中发送图像和 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 node.js + Express 中同时支持 json 和 jsonp 响应?

在单个响应中返回 mongoose 错误列表

Node.js - Express.js JWT 总是在浏览器响应中返回一个无效的令牌错误

在 Node.js/Express 中,如何自动将此标头添加到每个“渲染”响应中?

如何在 express/node js 中发送错误 http 响应?

node.js 和 express:如何等待 udp 响应