Express.js路由读取req.params.id返回404,请求地址出现[object Object]如何解决?
问题修复方案
核心故障原因
报错日志中的[object%20Object]说明请求接口时传入的商品ID是对象类型而非预期的字符串/数值,问题出在React路由参数的取值逻辑:useParams() 会返回包含所有路由定义参数的对象,你直接把整个对象传给了detailsProduct action,发起请求时对象被强制转成字符串[object Object]拼接到接口地址,最终触发404错误。
修复操作步骤
- 修正ProductScreen.js的路由参数取值逻辑
首先确认你项目路由配置中详情页的路径参数名,假设路由定义为/product/:id,将原有代码:
修改为解构取对应参数:const productId = useParams();const { id: productId } = useParams(); - 调整action调用逻辑,确保传入数值类型ID匹配后端校验规则
将原有useEffect内的调用代码:
修改为:dispatch(detailsProduct(productId))useEffect(() => { dispatch(detailsProduct(Number(productId))) }, [dispatch, productId]);
补充检查项
- 确认路由配置中的参数名和
useParams解构的key完全一致,比如路由如果配置为/product/:productId,则解构写法改为const { productId } = useParams() - 确认
detailsProductaction内部的请求逻辑是将传入的ID正确拼接到接口地址,格式应为/api/products/${传入的ID变量}
内容的提问来源于stack exchange,提问作者Aron
相关产品推荐
相关产品推荐

