You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在JSON Server中添加嵌套于Categories下的item资源

解决json-server中嵌套数组的添加问题

首先得明确:json-server的默认路由是基于顶层资源生成的,你的数据结构里Categories是顶层数组,而item是每个Category对象里的嵌套数组,所以直接用/Categories/item这种路径肯定不生效——它不知道你要操作哪个具体分类下的item。下面给你两种实用的解决思路:

方法一:用嵌套资源的正确路由(无需自定义路由)

json-server支持针对单个分类的嵌套操作,核心是先定位到具体的Category,再对它的item数组做操作:

方式1:追加item到指定分类

如果你只想给某个分类(比如id为1的分类)添加新item,直接用POST请求到嵌套路径即可:

this._http.post('http://localhost:3000/Categories/1/item', {
  product_id: 4,
  description: "Pizza4",
  price: 14.99,
  pickup: 1
})

这个请求会自动把新item追加到id为1的Category的item数组里,还会自动给新item分配唯一id

方式2:全量更新分类的item数组

如果你需要替换整个item数组(比如修改原有item同时添加新的),可以用PATCH请求:

// 假设你已经拿到了该分类原有的item数组
const existingItems = [...];
this._http.patch('http://localhost:3000/Categories/1', {
  item: [...existingItems, { product_id: 4, description: "Pizza4", price: 14.99, pickup: 1 }]
})

方法二:自定义路由(简化路径)

如果你觉得每次写/Categories/:id/item太繁琐,想把路径简化成比如/items/:categoryId,可以通过自定义路由实现:

  1. 在项目根目录创建routes.json文件,内容如下:
{
  "/items/:categoryId": "/Categories/:categoryId/item"
}
  1. 启动json-server时指定这个路由文件:
json-server --watch your-db.json --routes routes.json

之后你就可以用POST http://localhost:3000/items/1来给id为1的分类添加item,效果和方法一完全一致。

额外建议:调整数据结构(可选,更符合RESTful规范)

如果你的业务里item是独立的资源,建议把数据改成顶层数组的形式,这样json-server会自动生成完整的CRUD路由:

{
  "Categories": [
    { "id": 1, "name": "披萨分类" }
  ],
  "Items": [
    { "id": 1, "product_id": 1, "description": "Pizza1", "price": 12.99, "pickup": 0, "category_id": 1 },
    { "id": 2, "product_id": 2, "description": "Pizza2", "price": 8.99, "pickup": 1, "category_id": 1 }
  ]
}

这样添加item直接用POST /Items,通过category_id关联分类;查询分类下的item可以用/Categories/1?_embed=Items,这种结构在多数场景下更灵活易用。

你之前失败的原因就是把item当成了顶层资源,但你的数据里并没有顶层的item数组,所以路由不生效。按照上面的方法试试,应该就能解决问题啦!

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

火山引擎 最新活动