JSON Server发送POST请求仅插入Id无其他内容问题排查求助
问题原因
出现该现象的核心原因是JSON Server未正常解析你提交的请求体内容,常见诱因如下:
- 请求头缺失
Content-Type: application/json:这是该类问题最高发的诱因。JSON Server只会对携带该请求头的POST请求解析请求体中的JSON字段,否则只会自动生成(或忽略你提交的)id字段返回,不会写入其他内容。你提交的id为99但返回id为9,也符合请求体未被解析、JSON Server自动按自增规则生成id的特征。 - 请求路径与目标资源不匹配:若你要写入
posts数组,但请求路径错误发送到了/post、/category等不匹配的路径,JSON Server开启自动创建资源配置时,只会生成仅带id的空对象。 - 自定义配置拦截了请求体:若启动JSON Server时加载了自定义中间件、路由规则,可能存在配置错误清空了请求体数据的情况。
- 提交的JSON存在语法错误:实际请求的JSON若存在引号未闭合、末尾多余逗号等语法问题,会导致JSON Server解析失败,仅保留id字段。
修复方案
按优先级逐一排查验证即可:
- 检查POST请求的请求头,确保添加了
Content-Type: application/json,可通过浏览器开发者工具的网络面板、接口测试工具的请求详情页确认实际发出的请求头配置。
你可以用curl命令做基准测试验证该问题:
curl -X POST -H "Content-Type: application/json" -d '{"title":"测试","category":"React-Development","imageUrl":"https://cdn.pixabay.com/photo/2015/04/23/22/00/tree-736885_1280.jpg","text":"测试内容","date":"2023-10-01"}' http://localhost:3000/posts
正常会返回包含所有提交字段+id的完整对象。
2. 确认请求路径与db.json中定义的资源键名完全一致,写入posts数组的请求地址应为http://<你的服务地址>/posts。
3. 先用默认配置启动JSON Server测试:json-server db.json,排除自定义中间件、路由的影响,验证正常后再逐步排查自定义配置的问题。
4. 校验提交的请求体JSON格式是否合法,避免存在语法错误。
内容的提问来源于stack exchange,提问作者Severin Koch
相关产品推荐
相关产品推荐

