You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用json-server时POST请求仅生成id,其余数据未保存的问题排查

解决json-server POST请求仅保存id的问题

嘿,我刚碰到过一模一样的坑!这事儿根源是你用错了json-server接收POST数据的方式,咱们一步步捋明白:

核心问题:数据放错位置了

json-server的POST接口完全不会读取URL里的查询参数来创建资源,它只认请求体(Request Body)里的JSON数据。你之前把firstname、lastname这些参数挂在URL后面,服务器根本不会把它们当作新contact的属性,只会自动生成一个自增id,自然就只有id被存下来了。

正确操作步骤(以Postman为例)

  1. 简化请求URL:只保留基础地址就行,不要加任何查询参数,也就是 http://localhost:3001/contacts
  2. 配置请求体:
    • 切换到「Body」标签页
    • 选择「raw」格式,右侧下拉框选「JSON」
    • 把要提交的内容写成标准JSON格式放进去,比如:
      {
        "id": 48,
        "firstname": "rrtty",
        "lastname": "yryrty",
        "company": "trytryrt",
        "email": "tyrtyr",
        "message": "tyrtytry"
      }
      
  3. 发送请求:这时候再去看你的db.json,新的contact就会带着所有字段正确保存,包括你指定的id也能生效。

自研应用发起请求的注意事项

如果是你自己写的应用发请求,要盯紧两个关键点:

  • 必须设置请求头:Content-Type: application/json,告诉服务器你传的是JSON格式数据
  • 要把数据序列化成JSON字符串放在请求体里,比如用JavaScript的话:
    fetch('http://localhost:3001/contacts', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        id: 48,
        firstname: 'rrtty',
        lastname: 'yryrty',
        company: 'trytryrt',
        email: 'tyrtyr',
        message: 'tyrtytry'
      })
    })
    

为啥之前指定的id没生效?

因为你之前的请求根本没把id=48这个参数传到服务器的请求体里,服务器只能自动生成新的自增id。现在把id放到请求体的JSON里,只要这个id在contacts集合里还没被占用,就能用你指定的值。

另外,你db.json里那些只有id的条目,应该都是之前用错误方式发起请求留下的,现在用正确方法就不会再出现这种情况啦!

内容的提问来源于stack exchange,提问作者jupiter sailormoon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:23:40