个人博客设计记录

一、使用的中间件

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日期类型的数据格式不对,原因是时区问题,在数据库连接配置中添加如下代码,设置时区即可

// 设置时区,解决取出数据库中date类型数据格式不对的问题
timezone : "08:00"

-------------------------

原文地址:https://www.cnblogs.com/Walker-lyl/p/8067633.html