ljharb/qs
View on GitHubDifferent array parse behaviour of x-www-form-urlencoded between ExpressJS and rails
Open
#178 opened on Nov 11, 2016
bughelp wantedparse
Description
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"
]
]
}