Express.js报错Cannot destructure property 'name',如何按URL参数ID返回对应对象
问题原因
你错误将请求路径中的_id字符串直接作为数组下标访问users数组:users是普通下标数组,合法索引为0~5的数字,而你存储在用户对象中的_id是自定义随机字符串,二者并不匹配,因此users[req.params._id]返回undefined,触发解构报错。
修复方案
修改/users/:_id路由逻辑,使用Array.find()方法匹配_id属性一致的用户对象,同时增加不存在的容错处理:
app.get('/users/:_id', (req, res) => { // 匹配_id一致的用户 const targetUser = users.find(item => item._id === req.params._id); if (!targetUser) { // 匹配失败返回404状态码 return res.status(404).send({ message: '未找到对应用户' }); } // 可按需返回name字段或整个用户对象 res.send(targetUser.name); // 如需返回完整用户对象改为:res.send(targetUser) });
其他注意事项
- 你当前代码中未定义
cards变量,访问/cards路由时会抛出未定义错误,需提前声明对应的cards数组。 - 代码中
users数组声明在路由之后,但由于Express路由回调仅在收到请求时执行,此时users已经完成初始化,无需调整代码顺序。
内容的提问来源于stack exchange,提问作者Cjmaret
相关产品推荐
相关产品推荐

