7
我正在使用Express將請求代理到受OAuth 2訪問令牌保護的單獨API服務器。當令牌到期時,服務器將返回一個401,我現在正在我的路由器中間件中處理,然後刷新與客戶端會話相關的訪問令牌(我正在使用express-session
)。在節點快遞中再次調用相同請求
這裏是我的代碼:
router.js
app.use('/api', require('./routes.js'));
routes.js
var express = require('express'),
router = express.Router(),
routesController = require('./routes.controller.js');
router.route('/*')
.get(routesController.fetch);
routes.controller.js
module.exports.fetch = function(req, res, next) {
var options = helpers.buildAPIRequestOptions(req);
request(options, function(err, response, body){
if(response.statusCode === 401) {
authController.refreshToken(req, res, next);
} else {
res.status(response.statusCode).send(body);
}
});
};
authController
module.exports.refreshToken = function(req, res, next) {
var formData = {
grant_type: 'refresh_token',
refresh_token: req.session.refreshToken,
scope: 'PRODUCTION'
},
headers = {
'Authorization' : 'Basic ' + consts.CLIENT_KEY_SECRET_BASE64_DEV
};
request.post({url:consts.ACCESS_TOKEN_REQUEST_URL_DEV, form:formData, headers: headers, rejectUnauthorized: false}, function(err, response, body){
var responseBody = JSON.parse(body);
if (response.statusCode === 200) {
req.session.accessToken = responseBody.access_token;
req.session.refreshToken = responseBody.refresh_token;
next();
//How to recall the original request made from fetch controller function after this point?
} else {
console.log('SOMETHING ELSE HAPPENED!');
}
});
};
更新令牌後,我想重新問題,我用我取數據控制器的request
模塊觸發原來的API請求。
我有點難住我該如何去做這件事,有沒有一種優雅的方式來實現這一目標?