使用Express时无法从products.js获取单个商品数据问题排查
问题根因
- 核心是类型不匹配导致匹配失败:
req.params.id从URL路径中获取的所有参数值默认都是字符串类型,而你products数组中存储的商品_id是数字类型,使用===恒等运算符判断时会同时校验值和数据类型,二者类型不一致因此匹配失败,最终返回undefined。
修复方案
以下两种方案任选其一即可:
- 匹配时主动将URL参数转为数字类型,再做恒等判断
app.get('/api/product/:id', (req, res) => { const product = products.find((x) => x._id === Number(req.params.id)); res.json(product); });
- 将恒等运算符
===替换为宽松相等运算符==,匹配时会自动做隐式类型转换
app.get('/api/product/:id', (req, res) => { const product = products.find((x) => x._id == req.params.id); res.json(product); });
可选优化
建议增加商品不存在的异常判断,优化接口返回表现:
app.get('/api/product/:id', (req, res) => { const product = products.find((x) => x._id === Number(req.params.id)); if (product) { res.json(product); } else { res.status(404).json({ message: '对应商品不存在' }) } });
内容的提问来源于stack exchange,提问作者KiZaru
相关产品推荐
相关产品推荐

