How to get data and response status from API using node-fetch?

Dony Joseph picture Dony Joseph · Aug 22, 2018 · Viewed 30k times · Source

As per the node-fetch documentation node-fetch

we can get the response status like this

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

and for getting the data

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

I have a scenario where I need to return the JSON data and the status from the response. I tried to use like this

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

but the

console.log(jsonData.status)

won't return the status. How I can get status and output data

Answer

KarlR picture KarlR · Aug 22, 2018

The easiest solution would be to declare a variable and assign res.status value to it:

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
    console.error(err);
  });

You can also try it that way using async/await:

retrieveStatus = async (url) => {
  try {
    const response = await fetch(url);
    const { status } = response; 
    return status;
  } catch (err) {
   // handle error
    console.error(err);
  }
}

Then You can use it with any URL You want to:

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