使用json-server与json-schema-faker时POST接口仅提交ID字段求助
解决json-server POST数据仅存入id的问题
看起来你遇到的问题是POST请求到json-server时,只有id被保存,其他字段丢失。我来帮你一步步排查和解决这个问题:
首先排查请求本身的问题
这是最常见的原因,先确认以下几点:
- 请求URL是否正确:确保你是POST到
/tests端点(对应db.json里的tests数组),而不是根路径或者其他错误路径。 - 请求头是否正确设置:必须在请求头里添加
Content-Type: application/json,否则json-server无法正确解析请求体中的JSON数据,会导致字段丢失。 - 请求体格式是否正确:确保你发送的是完整的JSON对象,包含所有需要的字段。比如:
注意:不需要手动传入{ "name": "新测试条目", "pro1": 75, "pro2": "2024-05-20T14:20:00Z", "pro3": true, "pro4": 4, "pro5": 9 }id,json-server会自动为你生成唯一的id值,手动传id可能导致冲突,但不会直接导致其他字段丢失。
验证Mock数据生成是否正确
先确认你的json-schema-faker生成的db.json是正常的:
运行生成脚本后,打开./src/api/db.json,检查tests数组里的每个对象是否包含所有required字段(id、name、pro1等)。比如正确的db.json应该是这样的:
{ "tests": [ { "id": 1, "name": "Generated Name", "pro1": 60, "pro2": "2024-05-20T09:15:00Z", "pro3": false, "pro4": 2, "pro5": 5 } ] }
如果生成的文件是正常的,说明json-schema-faker的配置没有问题,问题集中在POST请求环节。
添加调试中间件排查请求
如果上面的检查都没问题,可以自定义json-server的启动脚本,添加中间件来打印请求体,确认服务器是否收到了所有字段:
创建server.js文件:
const jsonServer = require('json-server'); const server = jsonServer.create(); const router = jsonServer.router('./src/api/db.json'); const middlewares = jsonServer.defaults(); // 调试用中间件:打印POST请求的body server.use((req, res, next) => { if (req.method === 'POST') { console.log('POST请求体内容:', req.body); } next(); }); server.use(middlewares); server.use(router); server.listen(3000, () => { console.log('JSON Server 已启动在 http://localhost:3000'); });
然后用node server.js启动服务器,再次发送POST请求,查看控制台输出的请求体。如果控制台里的请求体只有id,那说明前端发送的请求本身就有问题;如果请求体包含所有字段但还是只存id,那可能需要检查json-server的版本或者是否有其他自定义配置干扰。
前端请求示例(参考)
如果你是用fetch发送请求,正确的写法应该是这样的:
fetch('http://localhost:3000/tests', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ name: '手动添加的测试项', pro1: 85, pro2: new Date().toISOString(), pro3: true, pro4: 7, pro5: 3 }) }) .then(res => res.json()) .then(data => console.log('保存成功:', data)) .catch(err => console.error('保存失败:', err));
内容的提问来源于stack exchange,提问作者user3214545
相关产品推荐
相关产品推荐

