最近在使用SAP云平台的机器学习API与SAP系统进行集成,因为SAP云平台Leonardo上的机器学习API每次消费都需要传递一个AccessToken,所以在每次实际调用之前API,我需要先发送请求获取AccessToken。请求的响应,除了返回实际的token外,还有一个过期时间,expires_in字段:根据OAuth2.0标准的定义,expires_in字段代表服务器下发的token,还有剩余时间在到期时间秒之前。我的代码如下:constrequest=require('request-promise-native');varconfig=require('../config.js');varTOKEN=undefined;varEXPIRES_IN=undefined;varTOKEN_FETCHED_SINCE=未定义;函数isCurrentDateExpired(){varcurrent=newDate();vardiffInMilliSeconds=current-TOKEN_FETCHED_SINCE;vardiffInSecond=Math.ceil(diffInMilliSeconds/1000);varexpired=diffInSecond>=EXPIRES_IN?真假;//用于调试;//过期=true;返回过期;}异步函数getAccessToken(){if(TOKEN===undefined||isCurrentDateExpired()){varraw=newBuffer(config.username+":"+config.password);constaccessToken=awaitrequest({方法:'GET',标头:{'授权':'基本'+raw.toString('base64')},url:config.ACCESS_TOKEN,json:false});varoToken=JSON.parse(accessToken);EXPIRES_IN=oToken.expires_in;TOKEN=oToken.access_token;TOKEN_FETCHED_SINCE=新日期();返回oToken。访问令牌;}else{返回令牌;}}varrequest1=getAccessToken();varfreshNewToken,secondTimeToken;request1.then(function(o){//console.log("token1:"+o);freshNewToken=o;});functiontest2(){varb=getAccessToken();b.then(function(o){//console.log("token2:"+o);secondTimeToken=o;console.log("它们应该相等:"+(freshNewToken==secondTimeToken));});}setTimeout(test2,6000);安装Jerry的逻辑设置,键入公众号“requirement”:
