【多图】记录下使用 koa2 搭建微信中控服务器

这篇文章是接上一篇文章模仿 egg.js 使用 koa2 搭建项目,代码已上传至 githubnode

前言

微信公众号开发的时候,须要先获取 access token,能够这个 token 是有次数限制的,同时这个 token 一次只会有一个有效,也就是若是从新请求,那么上一个获取到的 token 就会失效。ios

常规状况下这个不是问题,但是当有多个独立服务须要用到微信 API ,这个就会是个很是大的问题。git

微信给出的建议就是起一个专门用于刷新和管理 token 的一个服务器,这个就是中控服务器,不过这个若是只是用于管理微信的 token 就有点大材小用了,能够考虑将其余第三方的也接入进来,相似一个微服务的存在,这个服务是不区分环境的,测试,开发,生产均可以使用。github

思路

管理 token 的一个主要问题就是 token 会存储在那里,失效时间又由谁去管理。web

目前我接触到的作法都是将其存储到 redis 中,使用 redis 来管理 token 的存储和有效时间,若是 redis 中没法获取到 token,就去微信那边获取,若是存在直接返回数据。redis

核心代码npm

代码自己就一点点,所有加起来不到几百行(不含第三方包),但是为了能稳定容许这点代码,却须要搭建一个比较完整的项目出来,心累的赶脚😔。json

项目搭建

小公司的 node 项目自己业务代码(不含第三方)并不大,并不像浏览器中运行的代码那么庞大,可是搭建项目自己却须要耗费必定时间,除非大牛出手,否则一步一坑是确定的事情。axios

不过由于 node.js 自己的环境是可控的,因此咱们能够经过使用新的的 api 来解决一部分问题,通常状况下 node 项目的代码并非很推荐使用构建工具来编译后运行,因此一些特别新的 api 依然不是很推荐在项目中使用。api

项目结构是参考 eggjs 的,主要思路在上一篇已经说明,这里主要补充的是远程调式和启动脚本这些的编写。

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,因此自己可能也会存在必定的风险。

项目主要做为一个项目的模板使用,eggjs 虽然很是好用,但是还不到时候,小而巧才是目前咱们比较须要的。

相关文章
相关标签/搜索