1. 程式人生 > >node獲取token和ticket並存儲

node獲取token和ticket並存儲

地址 fun 事件 highlight bre 結構 成功 data switch

封裝自動獲取和存儲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並寫入 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 表示查詢你想要的數據   第二個參數為一個回調函數:返回查詢到的數據

node獲取token和ticket並存儲