假设在通过节点请求模块执行http请求时我有一个场景
1)对于每个API调用,如果访问令牌有效,则返回响应
2)如果Access令牌无效,请调用刷新令牌以获取新的访问令牌。如果要返回新的访问令牌,请再次回拨相同的api,否则将用户重定向到登录页面。
我的代码如下所示,但我觉得为每个api重复相同的步骤是多余的。有没有办法简化流程?我期待这样的结果作为最终结果:
最终期望代码:
var callApiA = {
..
..
shouldCallRefreshToken: true
}
request(callApiA, function(err, response, body) {
if(response.statusCode === 200) {
res.json(body);
}
});
当前代码:
request(callApiA, function(err, response, body) {
if (response.statusCode === 200) {
res.json(body);
} else if (body.invalidToken) {
if (refresh token still exist) {
request(callRefreshToken, function(err, response, body) {
if (response.statusCode === 200) {
request(callApiA, function(err, response, body) {
if(body.invalidToken) {
res.redirect('/login');
} else if (response.statusCode === 200) {
res.json(body);
} else {
res.json('unknown error');
}
});
} else {
res.redirect('/');
}
});
} else {
res.redirect('/login');
}
} else {
response.json('Unknown error');
}
});
答案 0 :(得分:0)
这样的东西可能会更清洁。
double