从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
相关产品推荐
相关产品推荐

