封装自动获取和存储token ticket
1. 根目录下创建config文件夹,结构如下
2. config.js 中的配置信息
module.exports = { publicPath: 'https://api.weixin.qq.com/cgi-bin/', // 公共的接口地址 appId: '', // 你公众号的id appSecret: '', // 你公众号的appSecret }
3. fsObj.js 中的代码
const fs = require('fs') const https = require('https') const config = require('./config') const write = (file, ca) => { // 获取token并写入 let files = ['access_token', 'jsapi_ticket'] let filesName = files[0] let getUrl = ''; switch (file) { case 'token': filesName = files[0] getUrl = `${config.publicPath}token?grant_type=client_credential&appid=${config.appId}&secret=${config.appSecret}` break; case 'ticket': filesName = files[1] getUrl = `${config.publicPath}ticket/getticket?access_token= &type=jsapi` break; } // 请求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}}` // 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', res => { console.log(`写入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 表示查询你想要的数据
第二个参数为一个回调函数:返回查询到的数据