Как получить доступ к данным из объекта Passthrough, возвращенного после вызова API?

Я отправляю запрос на выборку с помощью node-fetch по следующему URL-адресу: http://fantasy.premierleague.com/api/bootstrap-static/, чтобы вернуть некоторые JSON-данные. Доступ к URL-адресу в браузере или отправка запроса на получение с почтальоном возвращают ожидаемые данные JSON.

Однако, когда я отправляю запрос от узла, я получаю обратно объект, из которого я не знаю, как извлечь данные (рисунки ниже).

У меня нет большого опыта работы с узлом, но я уже делал успешные вызовы API. Обычно анализ ответа с помощью response.json() или JSON.parse(response) или response.body или response.toString() или некоторых их комбинаций работал у меня. Я наполовину знаком с буферами и потоками, но не уверен, и решение может быть связано с ними, однако я не могу понять это.

Я получаю различные ошибки и объекты в зависимости от того, что я пытаюсь. Я пытался использовать выборку и просто HTTP-запросы от node.

Этот вызов: введите здесь описание изображения

Возвращает это: введите здесь описание изображения

Если я делаю JSON.parse(ответ), я получаю следующую ошибку: введите здесь описание изображения

Response.body выглядит так: 1/2 2/2


person Tobbenda    schedule 10.10.2020    source источник
comment
Отвечает ли это на ваш вопрос? Использование Fetch API для доступа к JSON   -  person basic    schedule 10.10.2020
comment
К сожалению нет. Он возвращает ошибку «UnhandledPromiseRejectionWarning», жалуясь на «недопустимое тело ответа json» и «неожиданный конец ввода JSON». Однако в почтальоне заголовок «Content-Type» на самом деле является «Application/json». В любом случае спасибо.   -  person Tobbenda    schedule 10.10.2020


Ответы (1)


Fetch возвращает поток ответов, как указано здесь в ответе на похожий вопрос. может читать данные фрагментами и добавлять фрагменты в массив, а затем делать с этими данными все, что вам нужно. Более простым подходом было бы использование пакета запросов npm. Вот пример.

const request = require('request');
let options = {json: true};

const url = 'http://fantasy.premierleague.com/api/bootstrap-static/'
request(url, options, (error, res, body) => {
    if (error) {
        return  console.log(error)
    };

    if (!error && res.statusCode == 200) {
        console.log(body);
        // do something with JSON, using the 'body' variable
    };
});
person bug_dev    schedule 10.10.2020