Как получить данные и статус ответа из API, используя node-fetch?

В соответствии с документацией node-fetch

мы можем получить статус ответа, как это

fetch('https://github.com/')
    .then(res => {
        console.log(res.status);
    });

и для получения данных

fetch('https://api.github.com/users/github')
    .then(res => res.json())
    .then(jsonData => console.log(jsonData));

У меня есть сценарий, в котором мне нужно вернуть данные JSON и статус из ответа. Я пытался использовать как это

     fetch('https://api.github.com/users/github')
            .then(res => res.json())
            .then(jsonData => {
             console.log(jsonData);
             console.log(jsonData.status);
      });

но

console.log(jsonData.status)

не вернет статус. Как я могу получить статус и выходные данные

4 ответа

Решение

Самым простым решением было бы объявить переменную и присвоить ей значение res.status:

let status; 
fetch('https://api.github.com/users/github')
  .then((res) => { 
    status = res.status; 
    return res.json() 
  })
  .then((jsonData) => {
    console.log(jsonData);
    console.log(status);
  })
  .catch((err) => {
    // handle error for example
    // console.error(err);
  });

Вы также можете попробовать это таким образом, используя async/await:

retrieveStatusAndJson = async (url) => {
  try {
    const res = await fetch(url);
    const resJson = await res.json();
  } catch (err) {
   // handle error for example: 
   // console.error(err);
  }
  const { status } = res; 
  console.log(status); 
  console.log(resJson);
}

Затем Вы можете использовать его с любым URL, который Вы хотите:

retrieveStatusAndJson('https://api.github.com/users/github')

Другое альтернативное решение использует Promise.all

fetch('https://api.github.com/users/github')
  .then(res => Promise.all([res.status, res.json()]))
  .then(([status, jsonData]) => {
    console.log(jsonData);
    console.log(status);
  });

Надеюсь, поможет

Я мог бы пойти в противоположном направлении, однако я бы посоветовал вам использовать requestJs, так как его сообщество намного больше, чем выборка узлов и предоставляет множество функциональных возможностей.

С requestJs вы можете получить statusCode как

 request("https://api.github.com/users/github", (err, res, body) => {
     let statusCode = res.statusCode;
 });

RequestJs также предоставляет множество простых способов вызова различных методов API, а также позволяет легко наблюдать запрос API и ответ API.

Вот еще один вариант, использующий асинхронные лямбда-функции и деструктуризацию массива:

      fetch('https://api.github.com/users/github')
  .then(async (res) => {  
    return [await res.json(), res.status];
  })
  .then(([jsonData, status]) => {
    console.log(jsonData);
    console.log(status);
  })
  .catch((err) => {
    // handle error
    console.error(err);
  });
Другие вопросы по тегам