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 协议》,转载必须注明作者和本文链接
这不应该是发到 JavaScript 社区吗?