koa-vote 使用 egg 重构版本
- egg 跨域问题解决办法
- 在 plugin.js 中开启
egg-cors
插件 - 在
config.${env}.js
中配置白名单,注意域名不需要添加 http && https 前缀 - 有关跨域和同源策略的文章网上多的去了
- 在 plugin.js 中开启
egg-jwt 插件的初步使用- 参考项目:eggjs-demo
- 参考之前我做的 jwt 校验的项目 koa-vote
- jwt 校验的基础知识和好处网上同样一大堆,这里可以贴一下之前我翻译的一篇文章:[译] Angular 安全 —— 使用 JSON 网络令牌(JWT)的身份认证:完全指南,虽然是 Angular + Express,但是关于 JWT 的知识是通用的
- 在 plugin.js 中开启
egg-jwt
插件或者其它插件, egg 玩的人不是特别多,所以很多问题可以强迫自己通过看文档啥的自己解决,而且官方给的文档和 demo 都很用心,很棒 - 目前是自己在 middleware 中放了一个中间件
- 尝试将 auth 中间件放到
config.${env}.js
中,但是在中间件抛出异常之后会影响 vue-ssr 的正常进行,所以暂时没有全局应用,在后期的实现中会增加 match 和 ignore 的配置 - 将 jwt 解密之后的内容挂载到
ctx.state.user
上,方便对用户进行标识,思路源于 koa-jwt 的实现 - 一定不要使用 jwt 存放敏感信息,原因可以查看我翻译的文章
- 使用 egg-jwt 文档中指定的方式进行使用
- login register 接口重构
- 熟悉框架基本完成
- 完成 jwt 部分,并使用 jwt 记录用户 id,详见
/user
路由 - 完成图形验证码部分,使用 ccap 并结合 session 进行使用
- 使用 redis 拓展 session,但是目前只有 captcha 部分使用到了 session,所以没有绝对的必要使用 redis, 仅仅只是为了学习
- 完成文件上传功能,并返回静态文件地址
- 多个文件上传功能完成,并按照用户 id 进行独立存储
- 多文件上传至七牛并返回外链地址
- 删除本地public下的文件,并自定义异常处理中间件
- 密码忘记于重置接口
- 删除文件并进行数据库同步记录
- 获取七牛提供的文件信息
- 发送验证邮件并激活
- 向 egg-mail plugin 发 pr
- package.json 中指定从 github 拉取 egg-mail 依赖
- 封装 egg-captcha 插件
- 封装 egg-qiniu-upload 插件
- 创建投票相关接口
- 获取投票列表,删除投票
- 创建投票,提交投票
- 创建 xlsx 解析功能
- 封装 egg-xlsx plugin
- 忙活开学的一堆事情
- 向 egg-cors 提交 PR
- egg-cors 跨域问题解决方案(不携带 cookie):
// {app_root}/config/plugin.js exports.cors = { enable: true, package: 'egg-cors', };
// {app_root}/config/config.default.js exports.cors = {} exports.security = { domainWhiteList: [ 'http://localhost:8080' ] };
- egg-cors 跨域问题解决方案(在使用 session 的时候需要携带 cookie)
// {app_root}/config/plugin.js exports.cors = { enable: true, package: 'egg-cors', };
// {app_root}/config/config.default.js exports.cors = { credentials: true } exports.security = { csrf: { enable: false }, domainWhiteList: [ 'http://localhost:8080' ] };
- 开始增加单元测试,已经测试完成
/user
/login
/register
/forget
/update
控制器的测试
UserController
测试覆盖率100%
- 测试
VoteController
- 根据
ctx.header['user-agent']
确定来访者身份,如果不是浏览器、curl、postman、搜索引擎爬虫的话,就拒绝处理 - 好像没做点啥,其实是想做 prerender 的。。。。
- 做了一下 prerender 中间件,对搜索引擎爬虫的请求使用无头浏览器渲染之后再返回。但是由于无头浏览器对性能影响太严重,所以设置了缓存、限制了请求频率
- 具体参考中间件
- Use
npm run lint
to check code style. - Use
npm test
to run unit test. - Use
npm run autod
to auto detect dependencies upgrade, see autod for more detail.