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

从API读取数据存入MongoDB时遇'undefined (reading '0')'错误求助

问题描述

尝试从API读取数据并保存至MongoDB时,遇到错误:undefined (reading '0')。执行代码如下:

async function getdata() {
    const res = await fetch(**API**)
    const data = await res.json()

    for (let i = 0; i < data.length; i++) {
        const country = new Country({
            country: data[i].name.common,
            name: data[i].capital[0],
            latitude: data[i].latlng[0],
            longitude: data[i].latlng[1]
        })
        console.log(country)
        country.save()
    }
}

getdata()

控制台能输出部分所需数据,但上述错误依然存在。

错误原因

报错undefined (reading '0')说明你在尝试访问一个undefined值的索引[0],大概率是API返回的部分数据存在以下情况:

  • data[i].capital为空数组或者undefined(比如有些国家没有官方首都)
  • data[i].latlng为空数组或者undefined

当循环到这些数据项时,直接访问[0]就会触发该错误。

解决方案

为可能为空的字段添加空值校验,避免直接访问索引:

async function getdata() {
    const res = await fetch(**API**)
    const data = await res.json()

    for (let i = 0; i < data.length; i++) {
        // 提取数据并做空值兜底处理
        const countryName = data[i]?.name?.common || '未知国家';
        const capital = data[i]?.capital?.[0] || '无首都';
        const latitude = data[i]?.latlng?.[0] || null;
        const longitude = data[i]?.latlng?.[1] || null;

        const country = new Country({
            country: countryName,
            name: capital,
            latitude,
            longitude
        })
        console.log(country)
        // 用await处理save,避免异步请求堆积
        await country.save()
    }
}

getdata()

额外优化建议

  • 给整个函数添加try/catch块,捕获并打印错误,方便排查问题:
async function getdata() {
    try {
        const res = await fetch(**API**)
        const data = await res.json()

        for (let i = 0; i < data.length; i++) {
            // 上述数据处理逻辑
            await country.save()
        }
    } catch (err) {
        console.error('数据处理或保存失败:', err)
    }
}

内容的提问来源于stack exchange,提问作者sevag khecho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:40:42