Problème pour obtenir des statistiques spécifiques (Stats) à partir de PokeAPI à l'aide d'Axios et Node.js
P粉953231781
P粉953231781 2024-04-06 18:46:35
0
1
688

J'ai un problème, j'essaie d'utiliser l'API Pokémon, mais lorsque j'essaie d'accéder aux statistiques d'attaque, de HP et de vitesse, elle affiche tous les Pokémon undefined ! Quelqu'un peut-il me dire quel est le problème avec l'appel 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,
}

J'ai un fichier index.js pour tester la réception API et voici ce qu'il renvoie :

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

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

testApi()

Structure API :

P粉953231781
P粉953231781

répondre à tous(1)
P粉403549616

Votre code actuel ne prend pas correctement en compte la structure JSON - il recherche à la racine de chaque objet du tableau name 属性。您需要使用 解构 来访问stat les propriétés directement dans la condition :

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

Ou vous pouvez également utiliser stat.name 更改为 stat.stat.name.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal