Javascript 简化调用刷新令牌的节点请求代码
假设我在通过节点请求模块执行http请求时有一个场景。Javascript 简化调用刷新令牌的节点请求代码,javascript,node.js,express,Javascript,Node.js,Express,假设我在通过节点请求模块执行http请求时有一个场景。 1) 对于每个API调用,如果访问令牌有效,则返回响应。 2) 如果访问令牌无效,请调用刷新令牌以获取新的访问令牌。如果返回新的访问令牌,请再次调用相同的api,否则将用户重定向到登录页面。 我有如下代码,但我觉得对于每个api重复相同的步骤太多余了。有没有办法简化这个过程?我期待这样的结果: 最终期望代码: var callApiA = { .. .. shouldCallRefre
1) 对于每个API调用,如果访问令牌有效,则返回响应。
2) 如果访问令牌无效,请调用刷新令牌以获取新的访问令牌。如果返回新的访问令牌,请再次调用相同的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');
}
});
像这样的东西可能更干净一些
function reqApis(call, callback){
request(call, callback);
}
function reqTokenCallback( err, response, body) {
if (response.statusCode === 200) {
reqApis(callApiA, reqApiCallback);
} else {
res.redirect('/');
}
}
function reqApiCallback( err, response, body ) {
if (response.statusCode === 200) {
res.json(body);
} else if (body.invalidToken) {
if (refresh token still exist) {
reqApis(callRefreshToken, reqTokenCallback);
} else {
res.redirect('/login');
}
} else {
response.json('Unknown error');
}
}
reqApis(callApiA, reqApiCallback);
请注意……如果您想简化节点异步请求,请研究使用承诺,如果您愿意,您仍然可以使用请求: