Синтаксическая ошибка: неожиданный конец ввода JSON в JSON.parse () на («данные»)

#javascript #node.js #api #express #https

#javascript #node.js #API #выразить #https

Вопрос:

Я попытался использовать другой API, и это сработало, однако с этим он не работает.

 const express = require("express");
const https = require("https");
const bodyParser = require("body-parser");

const app = express();

app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
app.get("/",(req, res)=>{
https.get("https://pixabay.com/api/?key=xxx-zzzamp;q=yellow flowersamp;image_type=photo", (response)=>{
   console.log(response.statusCode);
       response.on("data",d=>{
           const lala = JSON.parse(d);
           console.log(lala);
       })
    
    })
});
app.listen(3000,()=>{
    console.log("Server started on port 3000")
})
  

Я получил это в консоли

200
не определено: 1
{«total»:28739,»totalHits»:500,»hits»:[{«id»:3063284,»pageURL»:»https://pixabay.com/photos/rose-flower-petal-floral-noble-3063284/»,»type»:»photo»,»tags»:»rose , цветок, лепесток», «Предварительный просмотр»:»https://cdn.pixabay.com/photo/2018/01/05/16/24/rose-3063284_150.jpg»,»previewWidth»:150,»previewHeight»:99,»webformatURL»:»https://pixaba

Синтаксическая ошибка: неожиданный конец ввода JSON
в JSON.parse ()

Комментарии:

1. Есть ли еще console.log() что-то, что вы не показываете во фрагменте? Откуда undefined:1 берется?

2. У вас есть три вывода в консоли, и я могу найти только 2 console.logs. чего-то не хватает. И совет, никогда не делитесь фрагментом кода с конфиденциальной информацией, такой как ключ API. Было бы разумно, если бы вы опустили API из своего фрагмента.

3. @SiradjiAwoual Спасибо за совет. Я не буду делать это снова

Ответ №1:

data Событие не означает, что запрос завершен. Данные запроса отправляются в пакетах.

Используйте data событие для сбора всех данных, а затем объедините их в end событие перед взаимодействием с вашими данными:

 const express = require("express");
const https = require("https");
const bodyParser = require("body-parser");

const app = express();

app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
app.get("/",(req, res)=>{
https.get("https://pixabay.com/api/?key=xxx-zzzamp;q=yellow flowersamp;image_type=photo", (response)=>{
   console.log(response.statusCode);
       let chunks = [];
       response.on("data",d=>{
           chunks.push(d);
       });
       response.on("end",()=>{
           const lala = JSON.parse(Buffer.concat(chunks).toString('utf8'));
           console.log(lala);
       });
    });
});
app.listen(3000,()=>{
    console.log("Server started on port 3000");
});