如何使用node-fetch从API获取数据和响应状态?

时间:2018-08-22 19:33:35

标签: javascript node.js fetch 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 个答案:

答案 0 :(得分:6)

最简单的解决方案是声明一个变量并为其分配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尝试这种方式:

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

然后,您可以将其与任何您要使用的网址一起使用:

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

答案 1 :(得分:0)

另一种替代解决方案是使用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);
  });

希望有帮助

答案 2 :(得分:0)

我可能会朝相反的方向前进,但是我建议您使用requestJs,因为它的社区比node-fetch大得多,并且提供了许多功能。

有了requestJs,您可以像这样获取statusCode

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

RequestJs还提供了许多简单的方法来调用不同的API方法,并且还易于观察API请求和API响应。

答案 3 :(得分:0)

这是另一个变体,使用异步 lambda 函数和数组解构:

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