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

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

cookies

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

这将在所有浏览器中工作。 只有限制是你可以返回的JSON的大小。 最大尺寸看起来是4093个字节 。

图像编码

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

在这种情况下,您将不得不在canvas上重build图像,或者使用图像数据url格式来dynamic创build一个图像对象,作为Kevin评论中的url。

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


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

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