ljharb/qs

Different array parse behaviour of x-www-form-urlencoded between ExpressJS and rails

Open

#178 创建于 2016年11月11日

在 GitHub 查看
 (4 评论) (2 反应) (0 负责人)JavaScript (8,015 star) (744 fork)batch import
bughelp wantedparse

描述

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"
        ]
    ]
}

贡献者指南

Different array parse behaviour of x-www-form-urlencoded between ExpressJS and rails · ljharb/qs#178 | Good First Issue