Node.js中POST传递对象数组解析异常,求解决方法?
问题原因与解决方案
这问题我之前也踩过坑,其实是urlencoded表单数据的解析规则在搞鬼,咱们一步步说清楚:
为什么会出现不符合预期的结果?
你用的students[][first]这种命名方式,没有给每个学生分配明确的索引标识。body-parser的urlencoded解析器会把所有同名的first、last、age字段分别收集成数组,然后统一塞到students数组的第一个对象里——它没法判断哪些输入框属于同一个学生,只能按字段名来归类聚合。
怎么改成你期望的对象数组格式?
给每个学生的字段加上相同的索引就行,明确告诉解析器哪些字段是一组的:
<!-- 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]">
你已经配置了bodyParser.urlencoded({extended: true}),这样修改后就能正确解析出你想要的格式:
[ { first: 'Fname1', last: 'Lname1', age: 'Age1'}, { first: 'Fname2', last: 'Lname2', age: 'Age2'} ]
简单来说,就是要给每个“学生对象”一个明确的位置标记,解析器才能把对应字段正确分组~
内容的提问来源于stack exchange,提问作者Phelipe Martin
相关产品推荐
相关产品推荐

