-
koa2 进阶学习笔记
-
1.1 快速开始
-
1.2 async/await使用
-
1.3 koa2简析结构
-
1.4 koa中间件开发与使用
-
2.1 原生koa2实现路由
-
2.2 koa-router中间件
-
3.1 GET请求数据获取
-
3.2 POST请求数据获取
-
3.3 koa-bodyparser中间件
-
4.1 原生koa2实现静态资源服务器
-
4.2 koa-static中间件
-
5.1 koa2使用cookie
-
5.2 koa2实现session
-
6.1 koa2加载模板引擎
-
6.2 ejs模板引擎
-
7.1 busboy模块
-
7.2 上传文件简单实现
-
7.3 异步上传图片实现
-
8.1 mysql模块
-
8.2 async/await封装使用mysql
-
8.3 项目建表初始化
-
9.1 原生koa2实现JSONP
-
9.2 koa-jsonp中间件
-
10.1 单元测试
-
11.1 开发debug
-
12.1 快速启动
-
12.2 框架设计
-
12.3 分层操作
-
12.4 数据库设计
-
12.5 路由设计
-
12.6 webpack4环境搭建
-
12.7 使用react.js
-
12.8 登录注册功能实现
-
12.9 session登录态判断处理
-
13.1 import/export使用
-
1.1 快速开始
koa2实现session
前言
koa2原生功能只提供了cookie的操作,但是没有提供session操作。session就只用自己实现或者通过第三方中间件实现。在koa2中实现session的方案有一下几种
- 如果session数据量很小,可以直接存在内存中
- 如果session数据量很大,则需要存储介质存放session数据
数据库存储方案
- 将session存放在MySQL数据库中
- 需要用到中间件
- koa-session-minimal 适用于koa2 的session中间件,提供存储介质的读写接口 。
- koa-mysql-session 为koa-session-minimal中间件提供MySQL数据库的session数据读写操作。
- 将sessionId和对应的数据存到数据库
- 将数据库的存储的sessionId存到页面的cookie中
- 根据cookie的sessionId去获取对于的session信息
快速使用
demo源码
https://github.com/ChenShenhai/koa2-note/blob/master/demo/session/index.js
例子代码
const Koa = require('koa')
const session = require('koa-session-minimal')
const MysqlSession = require('koa-mysql-session')
const app = new Koa()
// 配置存储session信息的mysql
let store = new MysqlSession({
user: 'root',
password: 'abc123',
database: 'koa_demo',
host: '127.0.0.1',
})
// 存放sessionId的cookie配置
let cookie = {
maxAge: '', // cookie有效时长
expires: '', // cookie失效时间
path: '', // 写cookie所在的路径
domain: '', // 写cookie所在的域名
httpOnly: '', // 是否只用于http请求中获取
overwrite: '', // 是否允许重写
secure: '',
sameSite: '',
signed: '',
}
// 使用session中间件
app.use(session({
key: 'SESSION_ID',
store: store,
cookie: cookie
}))
app.use( async ( ctx ) => {
// 设置session
if ( ctx.url === '/set' ) {
ctx.session = {
user_id: Math.random().toString(36).substr(2),
count: 0
}
ctx.body = ctx.session
} else if ( ctx.url === '/' ) {
// 读取session信息
ctx.session.count = ctx.session.count + 1
ctx.body = ctx.session
}
})
app.listen(3000)
console.log('[demo] session is starting at port 3000')
copy
运行例子
执行命令
node index.js
copy