node获取token和ticket并存储

封装自动获取和存储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 表示查询你想要的数据
  第二个参数为一个回调函数:返回查询到的数据
 
 
 

猜你喜欢

转载自www.cnblogs.com/chefweb/p/10751573.html