【发布时间】:2021-12-24 18:23:14
【问题描述】:
如何解析内容类型为:multipart/mixed in express 的请求正文?
此类请求的一个简单示例如下:
curl -H "Content-Type: multipart/mixed" -F "request=@body.json;type=application/json" -F "file1=@test.xml" -X POST https://mysimpleapi.com
body.json 文件是一个简单的 json
[{
"name": "Test",
"age": "23"
},
{
"name": "Best",
"age": "24"
}]
而 test.xml 只是一个普通文件。
上面的 curl 请求是这样的:
{
"method": "POST",
"path": "/",
"query": {},
"headers": {
"x-forwarded-for": "163.47.149.248",
"x-forwarded-proto": "https",
"x-forwarded-port": "443",
"host": "mysimpleapi.com",
"x-amzn-trace-id": "Root=1-618e4f8e-2cc109560ddfb65a7b5822ef",
"content-length": "428",
"user-agent": "curl/7.68.0",
"accept": "*/*",
"content-type": "multipart/mixed; boundary=------------------------e2d73e2082b30c29"
},
"bodyRaw": "--------------------------e2d73e2082b30c29\r\nContent-Disposition: attachment; name=\"request\"; filename=\"body.json\"\r\nContent-Type: application/json\r\n\r\n[{\n \"name\": \"Test\",\n \"age\": \"23\"\n},\n{\n \"name\": \"Best\", \n \"age\": \"24\"\n}]\n\r\n--------------------------e2d73e2082b30c29\r\nContent-Disposition: attachment; name=\"file1\"; filename=\"test.xml\"\r\nContent-Type: application/xml\r\n\r\n\r\n--------------------------e2d73e2082b30c29--\r\n",
"body": "--------------------------e2d73e2082b30c29\r\nContent-Disposition: attachment; name=\"request\"; filename=\"body.json\"\r\nContent-Type: application/json\r\n\r\n[{\n \"name\": \"Test\",\n \"age\": \"23\"\n},\n{\n \"name\": \"Best\", \n \"age\": \"24\"\n}]\n\r\n--------------------------e2d73e2082b30c29\r\nContent-Disposition: attachment; name=\"file1\"; filename=\"test.xml\"\r\nContent-Type: application/xml\r\n\r\n\r\n--------------------------e2d73e2082b30c29--\r\n"
}
我想获取此请求正文中的 json 对象。
我找不到任何有关如何解析此类请求的文档。我知道如何从请求中解析 JSON 和 urlencoded 表单数据,但是如何在 express 上解析这样的请求?是否有任何包可以为我进行此解析,以便 request.body 不是空对象?或者我必须自己编写某种解析器(我该怎么做?)?
【问题讨论】:
-
您必须为多部分正文使用第三方中间件。 Express documentation for its
body-parsermodule 说 “这不处理多部分主体...对于多部分主体,您可能对以下模块感兴趣” 但据我所知,列出的所有模块都不支持混合身体(或者这将是一个答案)。 -
是的,大多数库(包括上面 express 文档中列出的库)都是用于表单数据的,不支持这种类型的混合数据。
标签: javascript node.js express parsing