这篇文章是接上一篇文章,代码已上传至
前言
微信公众号开发的时候,需要先获取 access token,可以这个 token 是有次数限制的,同时这个 token 一次只会有一个有效,也就是如果重新请求,那么上一个获取到的 token 就会失效。
常规情况下这个不是问题,可是当有多个独立服务需要用到微信 API ,这个就会是个非常大的问题。
微信给出的建议就是起一个专门用于刷新和管理 token 的一个服务器,这个就是中控服务器,不过这个如果只是用于管理微信的 token 就有点大材小用了,可以考虑将其他第三方的也接入进来,类似一个微服务的存在,这个服务是不区分环境的,测试,开发,生产都可以使用。
思路
管理 token 的一个主要问题就是 token 会存储在那里,失效时间又由谁去管理。
目前我接触到的做法都是将其存储到 redis 中,使用 redis 来管理 token 的存储和有效时间,如果 redis 中无法获取到 token,就去微信那边获取,如果存在直接返回数据。
核心代码
代码本身就一点点,全部加起来不到几百行(不含第三方包),可是为了能稳定允许这点代码,却需要搭建一个比较完整的项目出来,心累的赶脚?。
项目搭建
小公司的 node 项目本身业务代码(不含第三方)并不大,并不像浏览器中运行的代码那么庞大,但是搭建项目本身却需要耗费一定时间,除非大牛出手,不然一步一坑是肯定的事情。
不过因为 node.js 本身的环境是可控的,所以我们可以通过使用新的的 api 来解决一部分问题,一般情况下 node 项目的代码并不是很推荐使用构建工具来编译后运行,所以一些特别新的 api 依然不是很推荐在项目中使用。
项目结构是参考 的,主要思路在上一篇已经说明,这里主要补充的是远程调式和启动脚本这些的编写。
1. 引入核心插件
- koa web 框架
- koa-logger 日志插件,简洁,其实生产想用另一款的
- koa-router 可选插件,懒人必备
- axios http 请求插件,支持 node + 浏览器
- redis 缓存用,其实有点大材小用了
- nodemon 开发时监听文件变化自动重启应用
- pm2 生产环境必备的
这里需要注意下,因为中控服务器本身不对外网公开,同时 cookie 仅在浏览器中得到支持,所以 session 插件并不需要引入,模板引擎和静态资源也类似,所以核心就这几个插件就可以了,如果你是大神,估计只要 koa 和 redis 了 ?。
2. 制作启动脚本
我的 npm 脚本,里面主要是定义入口文件,启动时自动安装依赖(只安装生产环境依赖的包),拆分 开发,调试和生产(测试和生产为同一命令)
定义好后的脚本是这样执行的
# 本地开发使用$ npm run dev# 启动(本地)调试模式$ npm run debug# 启动生产环境$ npm run start# 启动测试环境 --env 是 pm2 的功能,具体可看官方文档$ npm run start -- --env testing复制代码
3. 断点调试
远程调试和本地调试在 vscode 中的步骤是一样的,而且大部分远程调试是发生在测试环境(小公司才这样?),所以觉得麻烦的也可以把拍配置写进去。
因为很多人不是很明白 node 这么进行调试,这里介绍下 vscode 的调试步骤。
第一步: 需要在项目中定义一个文件,放在 .vscode/launch.json
文件中,可以定义多个调试配置,如图:
第二部: 在启动命令中添加 --inspect
参数,比如 node 直接启动 node --inspect app.js
或者使用 nodemon 启动 nodemon --inspect ./app.js
,如图:
这里注意下 --inspect
参数不能放在最后面,如果你启动不成功,那多半就是你把参数放后面了。
第三部: 选中那个杀虫图标,选中第一步的配置,点击绿色的启动按钮启动,这个时候就可以调试 node 程序了,这里要注意的是打断点只能使用编辑的来做,也就是行号边上,那里需要断点就点那里,在 vscode 中输入 debugger
是无效的,但是也不会报错,默认启动的端口号是 9229,如果改掉,那么第一步那里的配置也需要改掉。
最终效果图
最后
这个项目代码本身并不多,不过为了能让这个项目稳定运行,花了不少的心思,同时因为直接上 koa,所以本身可能也会存在一定的风险。
项目主要作为一个项目的模板使用, 虽然非常好用,可是还不到时候,小而巧才是目前我们比较需要的。