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

JSON结构设计与API嵌套资源路由访问问题求助

解决JSON Server嵌套路由访问同级资源的问题

你的问题核心是JSON Server的嵌套路由规则:/users/:userId/meals/:mealId 仅支持meals是users对象的子属性的场景,而你当前的meals和users是同级资源,所以无法通过该路由访问。下面给两种可行的解决办法:

方案一:调整JSON结构,将meals嵌套到用户对象中

修改你的db.json,把meals数组作为每个用户对象的属性:

{
  "users": [
    {
      "id": 1,
      "username": "Matheus",
      "meals": [
        {
          "id": 1,
          "name": "燕麦粥",
          "calories": 280
        },
        {
          "id": 2,
          "name": "鸡胸沙拉",
          "calories": 350
        }
      ]
    }
  ]
}

调整后,原有的/users/1/meals/1路由就能正常返回对应餐食,你现有的fetch代码不需要做任何修改。

方案二:保持同级结构,通过外键关联+查询参数访问

如果不想修改现有结构,需要给meals添加userId字段,用来关联所属用户:

{
  "users": [
    {
      "id": 1,
      "username": "Matheus"
    }
  ],
  "meals": [
    {
      "id": 1,
      "name": "燕麦粥",
      "calories": 280,
      "userId": 1
    },
    {
      "id": 2,
      "name": "汉堡",
      "calories": 550,
      "userId": 2
    }
  ]
}

此时要访问用户1的餐食1,需要用查询参数过滤关联关系,修改fetch请求:

async function fetchMeal(userId, mealId) {
    try {
        const response = await fetch(`https://dietapp-server.matheusrocha-mu.repl.co/meals/${mealId}?userId=${userId}`);
        const data = await response.json();
        // 若返回数组(理论上单mealId唯一时会返回单个对象,保险处理)
        return Array.isArray(data) ? data[0] : data;
    } catch (error) {
        console.error('Error fetching meals JSON:', error);
    }
}

另外,如果你需要获取某个用户的所有餐食,可以用/meals?userId=1;如果要获取包含所有餐食的用户详情,用/users/1?_embed=meals。


内容的提问来源于stack exchange,提问作者Matheus Caetano Rocha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:40:12