JavaScript报Cannot read property 'forEach' of undefined错误的原因及解决办法
错误原因
- 属性访问逻辑错误:代码中
items.accountId是固定读取items对象下名为accountId的属性,而非使用你之前定义的accountId变量的值作为键读取对应属性。根据注释你的accountId值为'data',如果你要读取的是items.data,用items.accountId是完全读不到的,返回值为undefined,对undefined调用forEach方法就会触发你遇到的类型错误。 - 隐含逻辑错误:你在
forEach循环内部直接调用res.json()发送响应,HTTP响应只能发送一次,首次发送后响应就会关闭,后续循环再调用res.json()会触发新的报错。
修复方案
- 将固定属性访问改为动态键访问:用
items[accountId]替代items.accountId,同时增加合法性判断,确认取到的值是数组后再执行遍历逻辑。 - 提前收集所有需要返回的
price数据,遍历结束后统一返回响应。
修复后的代码如下:
app.post('/getElements', (req, res) => { fs.readFile('items.json', function(error, data) { if (error) { return res.status(500).end() } try { const accountId = req.body.accountId // 值为'data' const items = JSON.parse(data) const targetList = items[accountId] // 先判断目标值是不是数组 if (!Array.isArray(targetList)) { return res.status(400).json({msg: '无对应数据'}) } // 收集所有price const priceList = targetList.map(item => item.price) // 统一返回,如果你只需要第一个item的price,直接取targetList[0]?.price返回即可 res.json({ priceList }) } catch (err) { console.log('Error: ', err) res.status(500).end() } }) })
内容的提问来源于stack exchange,提问作者user17151862
相关产品推荐
相关产品推荐

