Node.js使用axios请求HTTP接口时Response属性undefined问题排查
问题解决方案
核心错误原因
for...in遍历数组时,循环变量i返回的是数组的下标值,而非数组的元素对象,直接访问i.roster必然返回undefined。- 不推荐使用
for...in遍历数组,该语法原本设计用于遍历普通对象的键,遍历数组时会额外遍历原型链上的可枚举属性,容易触发预期外的问题。
修正后代码
简洁写法(推荐)
直接使用数组的map方法提取字段,逻辑更清晰:
// Node.js 用CommonJS规范的话将import改为 const axios = require('axios') import axios from 'axios' const urlBase = 'https://fantasy.espn.com/apis/v3/games/ffl/seasons/2021/segments/0/leagues/72628823?view=mMatchup&view=mMatchupScore&scoringPeriodId=' const week = 1 // 替换为实际的周数参数 const url = urlBase.concat(week) axios.get(url) .then(res => { const allTeams = res.data.teams // 先判断返回值是否为数组,避免报错 if (!Array.isArray(allTeams)) return console.log('返回的teams字段不是数组') const pogBoys = allTeams.map(team => team.roster) console.log(pogBoys) // 后续处理pogBoys的逻辑写在这里 }) .catch(err => console.error('请求异常:', err))
保留原循环逻辑的修正版
如果要保留你原有函数写法,修改循环逻辑即可:
axios.get(url).then((res)=> { let allRosters = res.data.teams; let rosters = (allRosters) => { let pogBoys = []; // 改用for...of直接遍历数组元素 for(let team of allRosters){ pogBoys.push(team.roster); console.log(team.roster); } return pogBoys; }; const pogBoys = rosters(allRosters); });
大体积JSON响应优化建议
如果返回的JSON体量特别大,不需要等待整个响应加载完成再处理,可以使用流式JSON解析库按需提取teams下的roster字段,降低内存占用。
内容的提问来源于stack exchange,提问作者Ian Cornish
相关产品推荐
相关产品推荐

