一、使用的中间件
1. koa
2. koa-static 实现静态资源服务器
3. koa-bodyparse 实现body的解析,主要是post请求数据的解析
4. koa-logger 控制台日志中间件
5. koa-session-minimal 适用于koa2 的session中间件,提供存储介质的读写接口 ,但真正存储的数据库等配置依赖其他
6. koa-mysql-session 为koa-session-minimal中间件提供MySQL数据库的session数据读写操作。
7. mysql 实现对mysql数据局的操作
二、 server目录结构
codes存取请求返回状态信息
db存取数据库sql相关文件
middlewares存取路由的回调中间件,在其中调用services层方法,响应路由请求
services存取业务逻辑相关函数,调用model层方法,对传入的参数数据和model层方法返回的数据,进行处理
models存取数据模型相关函数,接受参数,调用utils中的一些方法操作数据库,返回数据,不对数据格式等进行处理,
utils存取了数据库操作的一些封装方法
index.js服务器端入口
serverConfig.js存取数据库服务器相关配置,比如数据库连接配置
三、session的验证机制
原理过程:
session的生成过程:
对于第一次登陆请求,如果请求成功,则为其设置相应的session信息,比如登陆用户为liyanlei,根据用户名和密码查询到该用户的基本信息,然后按照以下格式设置对应session_data:
{ isLogin: true, username: 'liyanlei', userId: 1 }
然后以某种方式生成一个唯一的session_id,我们可以以键值对的形式理解,其中session_id为key,二session_data为value,将其存入数据库的表中(当然我们也可以为其设置一个expires过期时间,不断添加session信息,经过一段时间后,我们可以根据expires删除过期session,来减少数据库压力)
最后我们将生成的session_id写入到浏览器端的cookie中(比如说cookie中的USER_SID对应的值极为session_id),并为其设置生存期,当cookie的数据度过生存期后,便会失效。
根据sesson验证登陆
浏览器发出各种请求时,会自动携带当前未cookie信息(肯定是未过期的),我们接受请求,获取cookie中的USER_SID(也就是session_id),我们根据sesion_id查询数据库,在保存session信息的表中获取到对应用户的各种信息,也就是session_data,我们根据session_data可以判断当前登录用户是谁,是否之前已经登录过等等信息,具体要看我们在session_data中设置了什么,大概流程就是如期,如果当前登录用户没有已登录,就是要验证用户名和密码,通过后生成session,也就是上边的session生成过程,依次循环。
使用koa-session-minimal,koa-mysql-session
对于生成session信息、将session存入cookie、数据库中session的存储和读取这些操作,我们使用koa-session-minimal,koa-mysql-session这两个中间件就可以实现,可以节省我们去封装该功能函数的事件
四、koa-router的中间件中,如果当前请求时post请求,则在请求的处理中间件函数内通过ctx.redirect跳转页面无效
五、使用koa中的mysql包连接数据库,查询获取date日期类型的数据格式不对,原因是时区问题,在数据库连接配置中添加如下代码,设置时区即可
-------------------------