根据我的研究,通过POST方法传递对象数组的最佳方法是使用以下名称约定:
<!-- first student -->
<input type="text" name="students[][first]">
<input type="text" name="students[][last]">
<input type="text" name="students[][age]">
<!-- second student -->
<input type="text" name="students[][first]">
<input type="text" name="students[][last]">
<input type="text" name="students[][age]">
身体解析器设置:
var bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({extended: true}));
当我输入后期路线“req.body.students”时,我期待像这样的一系列对象:
[ { first: Fname1, last: Lname1, age: Age1} , { first: Fname2, last: Lname2, age: Age2}
相反,我的console.log显示我得到了这个:
[ { first : [Fname1 , Fname2], last : [Lname1, Lname2], age : [Age1, Age2] } ]
它出了什么问题?干杯!
答案 0 :(得分:0)
这就是the qa
library处理格式数据的方式。
我不会期望库的行为,而且它与PHP(明显的灵感)如何处理数据有所不同。所以你可能会认为这是一个bug join in the discussion on this issue。
您可以通过为行使用显式索引来解决此问题:
<!-- first student -->
<input type="text" name="students[0][first]">
<input type="text" name="students[0][last]">
<input type="text" name="students[0][age]">
<!-- second student -->
<input type="text" name="students[1][first]">
<input type="text" name="students[1][last]">
<input type="text" name="students[1][age]">
测试用例:
var qs = require("qs");
var data = "students[0][name]=alice&students[0][age]=11&students[1][name]=bob&students[1][age]=12";
console.log(qs.parse(data));
输出:
{ students: [ { name: 'alice', age: '11' }, { name: 'bob', age: '12' } ] }