Ich verwende Express, um Anfragen an einen separaten API-Server zu übertragen, der durch OAuth 2-Zugriffstoken geschützt ist. Wenn ein Token abläuft, gibt der Server eine 401 zurück, die ich jetzt in meiner Router-Middleware handhabe, um dann das mit der Client-Sitzung verknüpfte Zugriffstoken zu aktualisieren (ich verwende express-session
).Aufruf der gleichen Anfrage erneut in Node Express
Hier ist mein Code:
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!');
}
});
};
Nachdem das Token zu aktualisieren, würde Ich mag die Original-API-Anforderung erneut Problem, das ich bin Auslösung des request
Modul in meinem holen Controller.
Ich bin ein bisschen ratlos, wie ich das tue, gibt es einen eleganten Weg, dies zu erreichen?