yai 请求预处理脚本

var token = getToken();
var username = "****";
var password = "****";

if (token === null){
  context.promise = getNewToken().then((data) => {

     //设置当前的请求token
        context.query.token = data.token;
        saveToken(data.token, data.expires)
    })
}else{
    context.promise = new Promise(function(resolve) {
      context.query.token = token;
      resolve()
    })
}


function getNewToken(){
  return new Promise(function(resolve) {
      var api = context.utils.axios.post('http://'+context.hostname+'/api/admin/login', {
          user_name:username,
          password:password
      });
      api.then(function(result) {

        var data = result.data.data
        var token = data.token;
        var expires = data.expire;

        //这里只能返回一个参数,所以要设置为对象。
        resolve({
            token,expires
        });
      });
    });
}


function saveToken(token, expires){
    var expiredTime = (new Date()).getTime() + (expires * 1000);

    //保存token和过期时间
    storage.setItem('admin_token', expiredTime + '@#@' + token);
}

function getToken(){
   var con = storage.getItem('admin_token');

   if (!con) {
       return null;
   }

   let [expiredTime, token] = con.split("@#@")

   if (!token){
       return null;
   }

   var leftTime = expiredTime - (10 * 1000) -  (new Date()).getTime()

   console.log("token 距离过期还剩:" + (leftTime / 1000) + "秒")

   //留给足球队10秒的喘息时间
   if (leftTime <= 0){
       //已过期
       return null;
   }

   return token;
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 1

这不应该是发到 JavaScript 社区吗?

3年前 评论
嘴里起了个泡 (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!