You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()会触发新的报错。
修复方案
  1. 将固定属性访问改为动态键访问:用items[accountId]替代items.accountId,同时增加合法性判断,确认取到的值是数组后再执行遍历逻辑。
  2. 提前收集所有需要返回的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:36:03