Calling same request again in node express
I would turn the auth controller from middleware into a promise. Then make fetch
recursive.
routes.controller.js
module.exports.fetch = fetch;function fetch(req, res, next) { var options = getSavedOptsFromRequest(req) || helpers.buildAPIRequestOptions(req); request(options, function(err, response, body){ if(response.statusCode === 401) { saveOptsToRequest(req, options) authController.refreshToken(req) .then(function authOk(){ fetch(req, res, next); }) .catch(function authKo(){ res.status(500).send('something'); }); } else { res.status(response.statusCode).send(body); } });};function saveOptsToRequest(req, options){ req.requestedOptions = options;}function getSavedOptsFromRequest(req){ return req.requestedOptions;}
authController
module.exports.refreshToken = function(req) { var refreshTokenPromise = new Promise(function (resolve, reject){ 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; resolve(); //How to recall the original request made from fetch controller function after this point? } else { console.log('SOMETHING ELSE HAPPENED!'); reject(new Error("Something!!!!")); } }); }); return refreshTokenPromise;};