首页 > 解决方案 > PokeAPI 问题,无法获取数据

问题描述

所以我试图将 PokeAPI 用于教育目的,我运行这个:

const express = require('express')
const https = require('https')
const app = express()
const port = 3000

app.get('/', function(req,res){
    const url = 'https://pokeapi.co/api/v2/berry'
                //no uses el mismo nombre de argumentos
    https.get(url, function(resp) {
        resp.on('data', function(data){
            let datos = JSON.parse(data)
            console.log(datos)
        })
    })
    res.send('lol')
})



app.listen(port, () => console.log(`Example app listening on ${port} port!`))

在控制台中我得到了这个:

undefined:1
{"count":64,"next":"https://pokeapi.co/api/v2/berry?offset=20&limit=20","previous":null,"results":[{"name":"cheri","url":"https://pokeapi.co/api/v2/berry/1/"},{"name":"chesto","url":"https://pokeapi.co/api/v2/berry/2/"},{"name":"pecha","url":"https://pokeapi.co/api/v2/berry/3/"},{"name":"rawst","url":"https://pokeapi.co/api/v2/berry/4/"},{"name":"aspear","url":"https://pokea




SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at IncomingMessage.<anonymous> (C:\UdemyWeb\PokeProject\app.js:11:30)
    at IncomingMessage.emit (events.js:311:20)
    at IncomingMessage.Readable.read (_stream_readable.js:512:10)
    at flow (_stream_readable.js:989:34)
    at resume_ (_stream_readable.js:970:3)
    at processTicksAndRejections (internal/process/task_queues.js:84:21)

我一直在互联网上询问,我什至问他们的懈怠但没有得到回应,我认为这是我从 API 获取数据的方式,但我想知道为什么只使用这个 API 而不是其他人,我已经尝试过使用 weatherAPI 和 D&D API,完全没有问题。谢谢。

标签: javascriptnode.jsexpress

解决方案


我敢打赌,其他 api 也会出现这个问题。也许其他反应很小,所以他们都带着第一块到达。我建议使用httpaxios这样的库。如果您想自己处理块,则必须聚合所有数据并监听结束事件。

let data = '';
resp.on('data', function(chunk) {
    data += chunk;
});

resp.on('end', function() {
    console.log(JSON.parse(data));
});

我向您推荐的另一本好书是在 Node.js 中发出 HTTP 请求的 5 种方法


推荐阅读