SyntaxError: неожиданный конец ввода JSON в JSON .parse (<anonymous>) - PullRequest
0 голосов
/ 16 июня 2020

Я использую API для отображения некоторой информации на моей веб-странице, используя https.get () в nodejs. Но когда я пытаюсь записать ответ в консоль, анализируя его как JSON, отображается эта ошибка

SyntaxError: Неожиданный конец ввода JSON в JSON .parse () в IncomingMessage. (C: \ Users \ Hardik Aggarwal \ Desktop \ RSC \ app. js: 17: 33) в IncomingMessage.emit (events. js: 315: 20) в addChunk (_stream_readable. js: 295 : 12) в readableAddChunk (_stream_readable. js: 271: 9) в IncomingMessage.Readable.pu sh (_stream_readable. js: 212: 10)
в HTTPParser.parserOnBody (_http_common. js: 132: 24) в TLSSocket.socketOnData (_http_client. js: 469: 22) в TLSSocket.emit (events. js: 315: 20) в addChunk (_stream_readable. js: 295: 12)

URL-адрес отправляет правильные данные в формате JSON. Единственная проблема в том, что JSON .parse () не работает с этими данными. Код:

app.get("/", function(req, res){
    https.get(url, "JSON", function(response){
        response.on("data", function(data){
            const currency=JSON.parse(data);
            console.log(currency);
        })
    })

    res.render("index");
})

1 Ответ

1 голос
/ 16 июня 2020

Когда вы используете событие «data», это означает, что вы обрабатываете ответ как поток, и не гарантируется, что он отправит все данные одним блоком. Итак, в событии «данные» вы должны собрать все фрагменты, а в событии «конец» вы должны попытаться проанализировать данные. Также не забудьте проверить response.statusCode на наличие ошибок. Попробуйте это:

app.get("/", function(req, res){

https.get(url, "JSON", function(response){
    var data;
    response.on("data", function(chunk) {
      if (!data) {
        data = chunk;
      } else {
        data += chunk;
      }
    });

    response.on("end", function() {
        const currency=JSON.parse(data);
        console.log(currency);
        res.render("index");
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...