node获取token和ticket并存储
封装自动获取和存储token ticket
1. 根目录下创建config文件夹,结构如下
2. config.js 中的配置信息
4.2 使用 fsObj.read('', res => {}) 第一个参数为:token 或 ticket 表示查询你想要的数据 第二个参数为一个回调函数:返回查询到的数据
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄
2. config.js 中的配置信息
module.exports = {
publicPath: 'https://api.weixin.qq.com/cgi-bin/', // 公共的接口地址
appId: '', // 你公众号的id
appSecret: '', // 你公众号的appSecret
}
3. fsObj.js 中的代码
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
const fs = require('fs')
const https = require('https')
const config = require('./config')
const write = (file, ca) => {
// 获取token并写入
switch (file) {
case 'token':
httpsGet('access_token', `${config.publicPath}token?grant_type=client_credential&appid=${config.appId}&secret=${config.appSecret}`, ca)
break;
case 'ticket':
read('token', res => {
httpsGet('jsapi_ticket', `${config.publicPath}ticket/getticket?access_token=${res.access_token.access_token}&type=jsapi`, ca)
})
break;
}
}
const httpsGet = (filesName, getUrl, ca) => {
// 请求token和ticket
https.get(
getUrl,
function (data) {
var str = "";
data.on("data", function (chunk) {
str += chunk; //监听数据响应,拼接数据片段
})
data.on("end", function () {
let times = Date.parse(new Date())
let result = `{"${filesName}":${str.toString()},"times":${times + 7200 * 1000}}`
// 判断 jsapi_ticket 是否获取成功, 成功后写入,不成功侧打印 jsapi_ticket 获取失败
if (filesName === 'jsapi_ticket') {
let resultObj = JSON.parse(result)
if (resultObj.jsapi_ticket.errmsg !== 'ok') {
// 没有获取成功
console.log(`jsapi_ticket 获取失败,写入失败, 原因:token错误,或其他错误`)
return
}
}
// console.log(result)
const writeStream = fs.createWriteStream(`./config/json/${filesName}.json`);
//写入数据,指定数据的编码格式
writeStream.write(result, 'utf8');
//标记写入完成(写入完成后会广播一个finish事件)
writeStream.end();
//接收finish事件
writeStream.on('finish', () => {
console.log('写入完成');
ca(JSON.parse(result))
});
//写入失败
writeStream.on('error', () => {
console.log('写入失败');
})
})
})
}
const read = (file, ca) => {
//读取文件(文件流的方式读取文件)(文件比较多的时候分开来读,这样不会卡死)
// return new Promise((resolve, reject) => {
// })
let files = ['access_token', 'jsapi_ticket']
let filesName = files[0]
switch (file) {
case 'token':
filesName = files[0]
break;
case 'ticket':
filesName = files[1]
break;
}
let readStream = fs.createReadStream(`./config/json/${filesName}.json`);
let str = ''
//接收读取到的数据
readStream.on('data', (chunk) => {
str += chunk;
});
//读取完成后触发
readStream.on('end', (chunk) => {
let res = JSON.parse(str)
ca(res)
});
//读取失败
readStream.on('error', (error) => {
console.log(error);
});
}
// 过期自动写入
(() => {
read('token', res => {
let times = Date.parse(new Date())
if (times < res.times) {
console.log("没过期")
}
if (times > res.times) {
console.log("过期了")
// 过期了
// 写入token
write('token', token_res => {
console.log(`写入token成功 ---${token_res}`);
// 写入token完成后写入ticket
write('ticket', res => {
console.log(`写入ticket成功 --- ${res}`)
})
})
}
})
})()
module.exports = {
read
}
4. app.js中使用 4.1 倒入 const fsObj = require('./config/fsObj')
4.2 使用 fsObj.read('', res => {}) 第一个参数为:token 或 ticket 表示查询你想要的数据 第二个参数为一个回调函数:返回查询到的数据
更多精彩

