Postman与Insomnia发送POST请求时无法传递嵌套JSON数据问题咨询
你提交的Postman配置截图如下:
问题原因
这个问题和Mongoose Schema无关,因为客户端侧POST请求运行正常,说明数据写入逻辑和结构定义没有问题,问题出在API测试工具的请求格式和服务端Body解析规则不匹配,最常见的触发场景是:
- 你在Postman/Insomnia中使用的是
x-www-form-urlencoded格式发送嵌套数据 - 服务端Express的
express.urlencoded中间件的extended参数为默认值false,该模式下仅支持解析扁平结构的键值对,嵌套对象和数组会直接被丢弃 - 近期如果有升级Express版本,4.16.0及之后版本内置的
urlencoded中间件extended默认值为false,旧版本部分配置可能默认为true,升级后就会出现兼容问题
解决方案
- 方案1:修改服务端Body解析配置
将express.urlencoded的extended参数设置为true,即可支持解析嵌套结构的表单数据:// 替换你原有的urlencoded中间件配置 app.use(express.urlencoded({ extended: true })); // 保留原有的json解析中间件即可 app.use(express.json()); - 方案2:修改API测试工具的请求格式
在Postman/Insomnia的请求Body选项中,选择raw格式,子格式选择JSON,直接发送标准JSON结构的请求体,即可绕过urlencoded的解析限制,示例请求体:{ "username": "test_user", "age": "25", "name": [ { "firstName": "John", "lastName": "Doe", "middleIn": "A" } ], "programs": [ { "programName": "Computer Science" } ], "email": "test@example.com" }
验证方法
可以在服务端对应的POST路由最前面加一行日志打印req.body,如果打印结果中已经包含完整的嵌套数据,说明解析配置已经生效,后续写入Mongoose的逻辑会正常运行。
内容的提问来源于stack exchange,提问作者Eric Pezzulo
相关产品推荐
相关产品推荐

