【发布时间】:2018-04-14 12:08:19
【问题描述】:
目标是让 Node.js / hapi API 服务器通过两件事来响应浏览器的 AJAX 请求:
- 媒体文件(例如图片)
- 带有文件元数据的 JSON 对象
这是两个独立的项目,只是因为二进制数据不能轻易地存储在 JSON 中。否则,这将是一个单一的资源。不过,最好在单个响应中发送它们。
我们通过multipart/form-data 在单个请求中上传这些内容。在这种情况下,浏览器提供了一种内置机制来序列化正文,并且大多数服务器端框架都知道如何解析它。 但是如何在相反的方向上对响应做同样的事情呢?也就是说,服务器应该如何序列化主体以将其传输给客户端?
据我所知,multipart/mixed 可能是一种有用的内容类型。但很少有人谈论这个。大多数人似乎求助于提供两条单独的GET 路线,每条路线一条。我不喜欢这样,因为它让你更容易接触到比赛条件,等等。我错过了什么?
另请参阅我在hapijs/discuss#563 中的问题。
【问题讨论】:
-
“因为媒体文件不容易以 JSON 格式存储” 您是否尝试在
JSON响应中将图像作为data URI提供? -
是否将图像转换为 base64 并将 json 转换为 base64,然后将它们连接到带有
.分隔符的字符串对您有用吗?您可以将其作为字符串发送,然后在前面对其进行解码。 -
这就是我轻松的部分意思。我可以对媒体文件进行 base64 编码,但这不仅会增加额外的处理,还会使文件大小膨胀约 33%。我想我只是惊讶于这是一个在一个方向上完全解决的问题,而在另一个方向上则更少。
-
您可以将回复作为
multipart/form-data并使用Response.formData() -
酷,我不知道
response.formData()。这在这里很有用。现在我必须弄清楚如何在服务器上构建响应。我基本上需要pez的倒数。
标签: javascript node.js server multipart hapijs