Express搭建模拟API服务器时req.params返回undefined如何解决
问题原因
- 参数名不匹配:你在路由定义中使用的占位符是
/:id,因此req.params里对应的属性名是id,而非你解构时用的customer_id,读取不存在的属性自然返回undefined。 - 额外隐藏问题:
Array.find()是同步方法,不需要加await调用;另外从URL参数取出的取值默认是字符串类型,如果你的JSON数据里id是数字类型,用===全等判断会因为类型不匹配,即使参数取值正确也找不到对应数据。
修复方案
修改后的路由代码如下:
router.get("/:id", (req, res) => { // 正确读取id参数,同时转成数字匹配JSON中的数值类型 const { id } = req.params; const customerId = Number(id); console.log('ID NUMBER', customerId); try { const response = data.find( customer => customer.id === customerId); // 新增兜底判断,未找到对应数据返回404状态码 if(!response) { return res.status(404).json({message: '未找到对应客户'}); } console.log(response) // 规范写法:status()放在json()前,避免部分场景状态码不生效 res.status(200).json(response); } catch(error) { console.error("ERROR: ",error); res.status(500).json({message: '服务器内部错误'}); } })
内容的提问来源于stack exchange,提问作者tuna
相关产品推荐
相关产品推荐

