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
相关产品推荐
相关产品推荐

