javascriptnode.jsnode-fetch

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


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


Solution

  • 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((jsonResponse) => {
        console.log(jsonResponse);
        console.log(status);
      })
      .catch((err) => {
        // handle error
        console.error(err);
      });
    

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

    const retrieveResponseStatus = 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:

    const status = await retrieveStatus('https://api.github.com/users/github')