2016-03-09 86 views
2

我已經能夠設置我的代碼,因此當您向api函數發出請求時,oAuthHandler函數會自動爲您處理驗證。我遇到的問題是,我無法找到一種方法來緩存跨多個調用的令牌,所以我只請求一個新的令牌,如果它已經過期。如何在node.js中的API調用中緩存oAuth令牌

我已將所有相關代碼文件和我的測試文件的樣本放在以下GIST中。我只從文件中刪除了服務器連接的詳細信息。 Gist:https://gist.github.com/jgpeak/56e82c58b368429d4aad

回答

1

我發現我做錯了令牌緩存。我不需要在模塊導出之外啓動一個變量,而是需要在第一次導出的函數中啓動它,以便它綁定到我創建的實例以傳遞到下面更新的oAuthHandler的其他api方法。

(function() { 
'use strict'; 

//Required Modules 
// =============== 
const request = require('./requestHandler'); 
const cache = require('memory-cache'); 

//Hidden Variables 
// =============== 

module.exports = (oAuth) => { 
    var cachedToken = null; 
    return (processor, options, postData) => new Promise(function (resolve, reject) { 

    var errorProcessor = (err) => { 
     //If authorization failure refresh token and try one more time 
     if(err.statusCode && err.statusCode === 401){ 
     return oAuth.getToken() 
      .then((token)=>{ 
      cachedToken = token; 
      return request(token, processor, options, postData); 
      }) 
      .then((response) => resolve(response)) 
      .catch((err) => { 
      reject(err); 
      }); 
     } 
     return reject(err); 
    }; 

    if(cachedToken){ 
     return request(cachedToken, processor, options, postData) 
     .then((response) => resolve(response)) 
     .catch(errorProcessor); 
    } 
    else { 
     return oAuth.getToken() 
     .then((token)=>{ 
      cachedToken = token; 
      return request(token, processor, options, postData); 
     }) 
     .then((response) => resolve(response)) 
     .catch(errorProcessor); 
    } 
    }); 
}; 

}());