如何从API {}获取空回复

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从API {}获取空回复相关的知识,希望对你有一定的参考价值。

我目前正在使用Node.js来获取API数据并将其转换为我自己的Express.js API服务器以发送我自己的数据(我正在使用的2个API会在某个时候更改结构并且我有一些用户需要保留相同的结构)。

所以这是我正在使用的代码

app.get('/app/account/:accountid', function (req, res) {
    return fetch('https://server1.com/api/account/' + req.params.accountid)
      .then(function (res) {
      
      var contentType = res.headers.get("content-type");
      if (contentType && contentType.includes("application/json")) {
          apiServer = 'server1';
          return res.json();
      } else {
        apiServer = 'server2';
        throw "server1 did not reply properly";
      }
    }).then(server1Reconstruct).then(function (json) {
      res.setHeader('Content-Type', 'application/json');
      return res.send(json);
    }).catch(function (err) {
      console.log(err);
    }).then(function () {
      if (apiServer == 'server2') {
        server2.fetchAccount({
          accountID: [Number(req.params.accountid)],
          language: "eng_us"
        })
        .then(server2Reconstruct)
        .then(function (json) {
          res.setHeader('Content-Type', 'application/json');
          return res.send(json);
        }).catch(function (err) {
          console.log(err);
        });
      }
    });
  })

要快速解释代码:我通过普通Fetch调用server1这个答案可能是{}这是我遇到问题的地方。如果accountid不存在,服务器将返回一个没有错误的JSON响应来抓取...

我应该怎么做才能抓住它...如果我抓住它切换到服务器2。

(不要对server2调用太困惑,因为它是另一个包)。

答案

如果我正确理解您的问题,您应该按照以下步骤操作:

  • 获取初始API
  • 在结果上调用.json()方法 - 返回一个promise
  • 处理第一个.then(json => ...)中的json响应,并在此检查结果是否为{}然后调用server2,否则调用server1

顺便说一句,你的代码看起来非常混乱所有那些thencatch,我建议把一些东西放到函数中,如果可以的话使用async/await

以下是您可以使用的一些伪代码示例:

function server2Call() {
    return server2.fetchAccount({
        accountID: [Number(req.params.accountid)],
        language: 'eng_us'
    })
        .then(server2Reconstruct)
        .then(function (json) {
            res.setHeader('Content-Type', 'application/json');
            return res.send(json);
        }).catch(function (err) {
            console.log(err);
        });
}

app.get('/app/account/:accountid', function (req, res) {
    return fetch('https://server1.com/api/account/' + req.params.accountid)
        .then(res => {
            var contentType = res.headers.get('content-type');
            if (contentType && contentType.includes('application/json')) {
                return res.json();
            } else {
                server2Call()
            }
        })
        .then(json => {
            res.setHeader('Content-Type', 'application/json');
            if (json is {}) return server2Call()
            else return res.send(json);
        }).catch(function (err) {
            console.log(err);
        })
});

以上是关于如何从API {}获取空回复的主要内容,如果未能解决你的问题,请参考以下文章

如何使用java将数据从片段传递到android中的另一个片段?

如何从片段中的 JSON 响应中的对象获取数据

从Snipplr获取一个代码片段

从 dbid 获取片段 ID

Android,从其他片段返回的空列表视图

在使用ViewPager时尝试从其父活动修改片段时出现空指针异常