毕业设计打算做一个前后端分离的论坛
这个仓库放后端部分
readme暂时占坑,日后追加内容
实际入口文件为:bin/server.js
web框架:koa
express之后的下一代web框架
数据库:mongodb
文档型nosql
缓存:redis
key value型nosql
对文章和用户数据进行缓存,减少磁盘访问
使用setNX实现分布式锁防止雪崩问题即时通信:socket.io
面向实时 web 应用的 JavaScript 库,主要使用websocket协议,实现即时通讯十分方便
记录一下开发过程
在
FindReourceService
中重构缓存策略
之后将移除原本的缓存策略代码
增加
USE_HTTPS
配置项
修改初始化流程
将用户权限鉴定从routes中抽离,放进controller中
给出config模板示例
note: 最近在实习,这边暂时不加入新的功能
日志收集改用koa-log4
之前自己实现的日志中间件太过儿戏了
note: 之前一直不怎么注重日志部分,看来得补补了
前端对接基本完成,放到线上看一看效果吧
部署地址: blog.sura907.com
使用websocket的简易聊天室完成
原定一篇文章对应一个聊天室,但考虑到SURA手里的服务器应该架不住,故改为全站仅一个
考虑到服务器延迟等问题,聊天信息不存入数据库note: emmm,前端对接中......
评论功能完成
note: 评论功能和前端的整合也基本完成,差不多该开始啃即时通讯这块骨头了(希望别太难啃)
增加comment controller,评论相关功能推进中...
note: 增删改查,没什么需要记录的
修复文章编辑功能中的一个小bug
这个bug是由于token解析模块的改动引起的,目前已经大体修复完成
note: 没什么需要记录的追加: 更改目录结构, 规范目录命名, 将中间件(middlewares)和工具(tools)分开放置
修复了缓存策略中用于解锁并刷新资源的lua脚本
之前的版本使用模板字符串生成脚本,特殊符号会导致程序异常
note: emmm(╯‵□′)╯︵┻━┻
减少放入token中的信息,缩减token体积
note: 没什么需要记录的
之前在本地测试的时候,向一篇文章同时发起3000次请求
发现极少部分请求越过了缓存和分布式锁,直接去查询了数据库
分析之后发现问题出在解锁并刷新缓存的lua脚本上
这个lua脚本中先正常解锁,然后刷新缓存数据
解锁完成到数据刷新完成的这一段时间内,请求可以直接上锁之后访问数据库
总体来说锁应该在缓存刷新完成之后解除
略微修改lua脚本
note: 酸爽(╯‵□′)╯︵┻━┻
处理了邮箱地址大小写不敏感的问题
note: 将邮箱地址全部转换为小写,防止同一邮箱被重复注册;前后端整合过程中确实能发现许多问题
处理因为model字段重命名导致的一些小问题
note: 今日没什么需要记录的
稍微修改一下model的命名(之前的命名实在惨不忍睹)
关于 '错误捕获' 模块的修改(/tools/errHandle.js)之前操作未成功会返回相关错误的http状态码
这种方式会导致前端无法顺利获取错误提示信息
故先修改为即使出错依旧返回200,前端通过返回信息中的code和status判断操作是否成功略微修改跨域处理模块(/tools/resourceSharing.js)
之前对OPTIONS请求的处理有失妥当,OPTIONS请求会导致koa-jsonwebtoken模块抛出401
修改为检测到OPTIONS请求直接设置相应响应头,并返回200note: 还好关于'错误处理'和'跨域支持'在早期就完全抽出来了,修改起来比较省力o( ̄▽ ̄)ブ
缓存策略定型
note: 以后如果没有出现致命错误就不再修改了,当前版本对于毕设来说足够了
2019年的第一天,依旧在折腾缓存策略
note: 这种挖东墙补西墙的感觉真的是酸爽::>_<::
配置jsonwebtoken,完成用户登录
又又又又修改redis缓存策略,这次主要针对资源更新部分
note: 看来缓存策略这一部分真的是比较难啃,感觉这个版本依旧有问题,任重道远(╯‵□′)╯︵┻━┻
完成用户注册功能
note: 今日没什么需要记录的
配置邮件发送服务
用网易免费邮箱发的邮件几乎都直接被扔进垃圾箱了(╯‵□′)╯︵┻━┻
note: 用户相关功能正在推进
又又又一次修改redis缓存策略
经过此次修改,提高redis缓存策略泛用性
之前的redis缓存策略与controller耦合较高,且仅针对文章
鉴于使用token机制需要频繁检测用户信息,故决定之后对用户信息也进行缓存用户相关功能也可以起步了o( ̄▽ ̄)ブ
note: 目前毕设开发进度正常,阿门
再次对redis锁及缓存策略做出修改::>_<::
将锁的解除和资源数据的刷新用lua脚本封装到一起
防止在解锁成功后由于 GC pause 等原因造成线程阻塞后 再去刷新数据造成缓存和mongo数据不一致
note: emmmmmm,说什么好呢,这次的锁和缓存策略把我 '管脑袋不管屁股' 的一面给彻底暴露出来了(明明之前藏的那么辛苦)(╯‵□′)╯︵┻━┻
昨天写的哪个缓存策略果然不能用/(ㄒoㄒ)/~~
锁的实现有一些问题
今天可算是把缓存策略完善了
note: 之后会总结一下的
终于整好文章的redis缓存策略了
得找个时间压力测试一下,验证redis锁是不是在正常干活
note: 我这种'管脑袋不管屁股'的写缓存策略实在是煎熬,功能勉强实现,但代码烂的出奇(╯‵□′)╯︵┻━┻
增加跨域支持
前后端开始整合,该'双线作战'了
规范数据库配置(/config.js)
略微修改http错误处理模块
增加access日志模块
note: 后端骨架差不多成型,该开始写前端了
分离router和controller
note: 之前都是把业务逻辑写在router中的,这次把它分离开来;就目前看来,我写的果然还是'玩具代码'
嗯,明天开始写