最近开发小程序,有一个功能是分享页面,因为回来的页面是要带参数点,便决定使用生成小程序码来解决这个功能,先看官方的说明文档: 我使用的是第二种方式,目前这种方式生成小程序码数量不受限制!
这个借口的一个参数是要用的 access_token 的,但是 access_token 是有有效期到,同样官方文档也建议我们:
1、建议公众号开发者使用中控服务器统一获取和刷新Access_token,其他业务逻辑服务器所使用的access_token均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致access_token覆盖而影响业务;
同时我使用的是小程序的 wafer2-node-sdk 解决方案,这个是基于 Koa2 来实现的,写接口什么的也比较顺利,但是竟然没找到全局变量的功能,然后网上搜,有说用数据库的,缓存的,我不想这么一个简单的功能就用这个呀,所以我开始走上了弯路:
1.第一个版本使用 json 文件来存储,搭配定时器来实现,但是第一次可以用,但是再以后却开始 token 过期了.不解:后来意外的发现,因为我是用 require('./**/**.json') 的方式引入的 json 文件,这样带来一个问题,json 发生变化是,那个实例并不会发生改变,导致取到的永远是第一次加载时的值.
2.没办法,只有上 redis 了,一开始感觉一个简单的功能没必要,其实用 redis 也比较方便,服务器使用的 CentOS,然后yum install redis -y 就可以了,然后搭配 redis 库, 配合 expire 存储,也实现了功能,同时使用 schedule-node 来执行定时刷新,我设置的刷新频率是一个小时一次,刚开始还不错,可是用完还是会报过期.懵逼中.
3.无意中搜到一篇文章,简直是救命稻草:原文找不到了,意思是同一个 AppID 在其他地方请求时也会导致过期,我擦,因为我在本地也有开发环境,也会定时请求,赶紧把本地的请求关闭,同时线上开启了一个获取 access_token 的接口,本地要用都从这个接口获取,几天下来,总算解决了问题.同时使用 node_env 来判断线上还是本地,避免认为导致的错误.
希望对大家有帮助.
网友评论