如何从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
顺便说一句,你的代码看起来非常混乱所有那些then
和catch
,我建议把一些东西放到函数中,如果可以的话使用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 {}获取空回复的主要内容,如果未能解决你的问题,请参考以下文章