发表于: 2020-06-12 20:20:07
2 1976
今天完成的事情:
1.推进任务
明天计划的事情:
1.推进任务
遇到的问题和收获:
跟着教程写了些东西。想测试一下获取的数据
//定义类,获取access_token
class Wechat {
/*用来获取access_token*/
getAccessToken() {
//定义请求的地址
const url = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appID}&secret=${appsecret}`
//发送请求
/*
使用库
request
request-promise-native 返回值是一个promise对象
* */
return new Promise((resolve, reject) => {
rp({
method: 'GET',
url,
json: true//将要发送的数据转为json发送过去
}).then(res => {
console.log(res);
/*
//设置access_token的过期时间,+5分钟,后面当前时间小于这个过期时间就说明还没有过期.
res.expires_in = Date.now() + (res.expires_in - 5 * 60) * 1000//秒乘以1000
//将promise对象状态改成成功的状态
resolve(res)
}).catch(err => {
console.log(err);
//将promise对象状态改成失败的状态
reject('getAccessToken方法出了问题:' + err)
})
})
}
/*
*用来保存access_token
* accessToken是要保存的凭据
*/
saveAccessToken(accessToken) {
//将对象转化json字符串,不然保存的会是object
accessToken = JSON.stringify(accessToken)
//将access_token保存一个文件
return new Promise((resolve, reject) => {
writeFile('./accessToken.txt', accessToken, err => {
if (!err) {
console.log('文件保存成功');
resolve()
} else {
reject('saveAccessToken方法出了问题:' + err)
}
})
})
}
/*
* 用来读取access_token
* */
readAccessToken() {
//读取本地文件中的access_token
return new Promise((resolve, reject) => {
readFile('./accessToken.txt', (err, data) => {
if (!err) {
console.log('文件读取成功');
//将saveAccessToken方法里转化的字符串accessToken转化为js对象
data = JSON.parse(data)
console.log(data);
resolve(data)
} else {
reject('readAccessToken方法出了问题:' + err)
}
})
})
}
/*
* 用来检查access_token是否有效
* */
isValidAccessToken(data) {
if (!data && !data.access_token && !data.expires_in) {
//代表access_token是无效的
return false
}
//检测access_token是否在有效期内,如果当前时间超过过期时间,则过期了
return data.expires_in >= Date.now();
}
/*
* 用来获取没有过期的access_token
* */
fetchAccessToken() {
//优化
if (this.access_token && this.expires_in && this.isValidAccessToken(this)) {
//说明之前保存过acces_token,并且它是有效的,直接使用
return Promise.resolve({
access_token: this.access_token,
expires_in: this.expires_in
})
}
//是fetchAccessToken函数的返回值
return this.readAccessToken()
.then(async res => {
//本地有文件
if (this.isValidAccessToken(res)) {
//有效的
resolve(res)
} else {
const res = await this.getAccessToken()
await this.saveAccessToken(res)
return Promise.resolve(res)
}
})
.catch(async err => {
const res = await this.getAccessToken()
await this.saveAccessToken(res)
return Promise.resolve(res)
}
)
.then(res => {
this.access_token = res.access_token
this.expires_in = res.expires_in
return Promise.resolve(res)
})
// })
}
}
不过师兄讲我关注的点不应该是这里。
以上代码并不能完全看明白。所以还是准备看其他的
可以现在准备下复盘了吗,这个任务现在还不太清楚怎么做
评论