首页  >  问答  >  正文

使用 Axios 和 Node.js 从 PokeAPI 获取特定统计信息 (Stats) 时遇到问题

我有一个问题,我正在尝试使用 Pokemon API,但是当我尝试访问攻击、HP 和速度统计信息时,它显示所有 Pokemon 的 undefined!谁能告诉我 API 调用出了什么问题?

const axios = require('axios');

const apiPokemon = async () => { 
    try {
        const pokemons = await axios
        .get('https://pokeapi.co/api/v2/pokemon?limit=50')
        const secondUrlMap = await  pokemons.data.results.map(  pokemon  => {
            return pokemon.url
        })
        const pokemonArr = await Promise.all(secondUrlMap.map(async(url) => { 
            const urlResponse = await axios(url)
            return{
                id:urlResponse.data.id,
                name:urlResponse.data.name,
                height:urlResponse.data.height,
                weight:urlResponse.data.weight,
                hp:urlResponse.data.stats.find(stat => stat.name === 'hp')?.base_stat,
                attack:urlResponse.data.stats.find(stat => stat.name === 'attack')?.base_stat, 
                speed:urlResponse.data.stats.find(stat => stat.name === 'speed')?.base_stat,
                types:urlResponse.data.types.map((type) => type.type.name),
                img:urlResponse.data.sprites.other['official-artwork'].front_default,
            }
        }))
        return pokemonArr
    } catch (error) {
        return ({error:error.message})
    }
}

module.exports =  {
    apiPokemon,
}

我有一个 index.js 文件来测试 API 的接收,这就是它返回的内容:

const { apiPokemon } = require('./apiPokemon')

async function testApi() { 
    const pokemons = await apiPokemon()
    console.log(pokemons)
}

testApi()

API结构:

P粉953231781P粉953231781165 天前446

全部回复(1)我来回复

  • P粉403549616

    P粉4035496162024-04-07 10:03:55

    您当前的代码没有正确考虑 JSON 结构 - 它正在数组中每个对象的根中查找 name 属性。您需要使用 解构 来访问stat 属性直接在条件中:

    hp: urlResponse.data.stats.find(({stat}) => stat.name === 'hp')?.base_stat
    attack: urlResponse.data.stats.find(({stat}) => stat.name === 'attack')?.base_stat
    // etc.

    或者您也可以将 stat.name 更改为 stat.stat.name

    回复
    0
  • 取消回复