ljharb/qs
Different array parse behaviour of x-www-form-urlencoded between ExpressJS and rails
開放
#178 建立於 2016年11月11日
bughelp wantedparse
倉庫指標
- 星標
- (8,943 顆星)
- PR 合併指標
- (PR 指標待抓取)
描述
I use content-type: application/x-www-form-urlencoded to send POST request to backend server. The post body as follow:
listing[pictures][files][][name]=9ADDD7B1-FCFF-4538-916A-1E63DFB43A72&
listing[pictures][files][][name]=EFFE67B2-5D41-4B74-A33E-5963F54FAEC7&
listing[pictures][files][][name]=BBC9CB38-FE01-4F1A-AE37-7ED71F4B2CB5
In backend server, if I use ruby on rails, the POST will be parsed as follow:
"pictures"=>{
"files"=>[
{"name"=>"9ADDD7B1-FCFF-4538-916A-1E63DFB43A72"},
{"name"=>"EFFE67B2-5D41-4B74-A33E-5963F54FAEC7"},
{"name"=>"BBC9CB38-FE01-4F1A-AE37-7ED71F4B2CB5"}
]
}
This result is what I expected to be.
But, If I use nodeJS express and body-parser:
// parse application/json
app.use(bodyParser.json());
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: true }));
extended: true means that bodyParser will use qs to parse data.
The POST will be parsed as follow:
"pictures"=>{
"files"=>[
"name"=>[
"9ADDD7B1-FCFF-4538-916A-1E63DFB43A72",
"EFFE67B2-5D41-4B74-A33E-5963F54FAEC7",
"BBC9CB38-FE01-4F1A-AE37-7ED71F4B2CB5"
]
]
}