该文章不讨论怎么搭建redis-server,只讨论如何在express.js框架中使用redis-server来存储session。
创建App
- 创建app目录
1 2
| mkdir my_redis_session_app cd my_redis_session_app
|
- 初始化app,生成package.json
创建express App
1 2 3 4 5 6 7 8 9
| npm install express --no-save
npx express-generator
npm install -g express-generator express --view=pug my_redis_session_app
|
1 2 3 4 5 6
| npm install
npm install express-session npm install [email protected] connect-redis npm install uuid
|
生成的目录结构大体如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| . ├── app.js ├── bin │ └── www ├── package.json ├── public │ ├── images │ ├── javascripts │ └── stylesheets │ └── style.css ├── routes │ ├── index.js │ └── users.js └── views ├── error.pug ├── index.pug └── layout.pug
|
配置secret环境变量
文章中的测试环境使用docker-compose,这在environment中配置SESSION_SECRET环境变量。
测试时可以用以下这种方式来启动服务
1
| SESSION_SECRET=<secret> npm start
|
使用redis store
以下修改都在app.js中
导包
1 2 3 4
| const session = require('express-session'); const redis = require('redis'); const redisStore = require('connect-redis')(session); const { v4: uuidv4 } = require('uuid')
|
登记redis session
可以在app.js的这行代码(大概在app.js的25行左右)
1
| app.use(express.static(path.join(__dirname, 'public')));
|
后加入以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| app.use(session({ genid: (req) => { return uuidv4() }, name: '<根据实际填写>', secret: process.env.SESSION_SECRET, resave: false, saveUninitialized: true, store: new redisStore({ client: redis.createClient({ host: '<根据实际填写>', port: 6379, ttl: 86400, no_ready_check: true, }), }), }));
|