Next.js API动态路由无法获取对象ID的问题求助
问题分析与解决方案
你的代码无法找到目标文章的核心原因是数据结构层级理解错误,以及查找逻辑未匹配实际数据结构:
- 从
data.js的结构来看,Trending数组的每个元素是包含data(文章数组)和meta(分页信息)的对象,文章的id并不在Trending的直接元素上,而是嵌套在value.data数组的子对象中。 req.query.postId是字符串类型,而文章的id是数字类型,虽然==能隐式转换,但显式转换更严谨,可避免潜在bug。
修正后的[postId].js代码
import data from "../data" export default function handler(req,res){ const{ postId }= req.query; const { Trending } = data; if(postId){ let targetPost = null; // 遍历每个Trending分组 for (const trendItem of Trending) { // 在当前分组的文章数组中查找匹配id的内容 const found = trendItem.data.find(item => item.id === Number(postId)); if (found) { targetPost = found; break; } } if (targetPost) { return res.status(200).json(targetPost); } } return res.status(404).json({ error:"Post Not Found"}) }
代码说明
- 遍历
Trending数组的每个分组项,每个分组都包含data文章数组 - 用
Number(postId)将字符串类型的postId转为数字,和文章的数字id做严格相等匹配(===) - 找到目标文章后立即终止遍历并返回结果,避免不必要的计算
- 若遍历完所有分组都未找到匹配项,返回404
简化写法(适用于Trending仅一个分组的场景)
如果你的Trending数组始终只有一个元素,可简化查找逻辑:
import data from "../data" export default function handler(req,res){ const{ postId }= req.query; const { Trending } = data; if(postId){ const post = Trending[0].data.find(item => item.id === Number(postId)); return post ? res.status(200).json(post) : res.status(404).json({ error:"Post Not Found"}); } return res.status(404).json({ error:"Post Not Found"}) }
内容的提问来源于stack exchange,提问作者Preethi
相关产品推荐
相关产品推荐

