25

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

2

4 Answers 4

44

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')

Sign up to request clarification or add additional context in comments.

Comments

15

Another alternative solution is using 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);
  });

Hope it helps

1 Comment

This solution makes the most sense.
-1

I might be going in opposite direction however I would suggest you to use requestJs, as its community is much bigger then node-fetch and provides lots of functionality.

With requestJs you can fetch statusCode like

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

RequestJs also provides lots of easy way to call different API methods and also easy to watch API request and API response.

1 Comment

Request has been deprecated
-1

Here is yet another variant, using async lambda functions and array destructuring:

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);
  });

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.