用Node搭建一个后台管理系统的后端—微信小程序access_token的缓存与更新(二)

这个后台中,我们主要使用的是微信小程序的云数据库,那么如果我们要在我们的项目中调用这个云数据库,那么肯定避免不了要使用到access_token这个参数,这里就教大家如何封装一个自动更新access_token的函数。

1.这里要用到request、request-promise

npm install request
npm install request-promise

在根目录下创建一个utils文件夹,里面创建getAccessToken.js

const rp = require('request-promise')

const APPID = '' //这里填入你的微信小程序appid

const APPSECRET = ''//这里填入你的微信小程序秘钥

const URL = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${APPSECRET}`

const fs = require('fs')

const path = require('path')

const fileName = path.resolve(__dirname, './access_token.json')

//console.log(fileName)

//设置token
const updateAccessToken = async () => {
  const resStr = await rp(URL)
  const res = JSON.parse(resStr)
  console.log(res)
  // 写文件
  if (res.access_token) {
    let obj = {
      access_token: res.access_token,
      createTime: new Date()
    }
     //第一个参数是文件的绝对路径,第二个是传入的值
    fs.writeFileSync(fileName, JSON.stringify(obj))
  } else {
    await updateAccessToken()
  }
}

//获取token
const getAccessToken = async () => {
  //读取文件 第一个参数是文件的绝对路径,第二个是字符类型
  try {
    let readRes = fs.readFileSync(fileName, 'utf8')
         readRes = JSON.parse(readRes)
    const createTime = new Date(readRes.createTime).getTime()
    const nowTime = new Date().getTime()
    //如果创建的时间超过现在时间2小时 (脱机情况)
    if ((nowTime - createTime) / 1000 / 60 / 60 >= 2) {
      await updateAccessToken()
      await getAccessToken()
    }
    return readRes.access_token
  } catch (error) {
    //如果获取不到这个文件的话,那么再调用这个方法
    await updateAccessToken()
    await getAccessToken()
  }
}

//定时触发
setInterval(async () => {
  await updateAccessToken()
}, (7200 - 300) * 1000);

// console.log(getAccessToken())

module.exports = getAccessToken

这里简单说明一下,微信小程序的access_token每隔两个小时就会过期,所以这里需要用一个setInterval进行每隔两小时进行更新一次。

使用的例子如下:

const getAccessToken = require('../utils/getAccessToken') //获取token

router.get('/list', async (ctx, next) => {
      const access_token = await getAccessToken()
})

这样就封装完成了。

发布了53 篇原创文章 · 获赞 59 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42268364/article/details/103271278