node.js,koa2连接redis,解决存储session

    科技2024-01-16  95

    导语: 为了避免node后台太多的session,导致内存溢出还有各个后台进程之间不能通讯的问题,我们就要用到redis来存储session,来解决这一系列问题。

    1,创建文件conf,在其里面创建db.js,用于存放redis的账号还有密码。

    //根据开发或者生产模式来选择数据库 const env = process.env.NODE_ENV let MYSQL_CONF let REDIS_CONF if (env === 'dev') { MYSQL_CONF = { host: 'localhost', user: 'root', password: 'xiaomizhou123', port: '3306', database: 'mydb' } //redis_conf REDIS_CONF = { port: 6379, host: '127.0.0.1' } } if (env === 'production') { //mysql MYSQL_CONF = { host: '172.**.**.**', user: 'root', password: 'xiaomizhou123', port: '3306', database: 'mydb' } //redis_conf REDIS_CONF = { port: 6379, host: '172.**.**.**' } } module.exports = { MYSQL_CONF, REDIS_CONF }

    2,安装依赖和在app.js中添加一些代码

    先安装两个依赖

    npm i koa-generic-session npm i koa-redis

    接着修改app.js

    const session = require('koa-generic-session') const redisStore = require('koa-redis') app.keys = ['xiaomizhou#13800_'] app.use(session({ // 配置 cookie cookie: { path: '/', httpOnly: true, maxAge: 24 * 60 * 60 * 1000 }, // 配置 redis store: redisStore({ // all: '127.0.0.1:6379' // 写死本地的 redis all: `${REDIS_CONF.host}:${REDIS_CONF.port}` }) }))

    搞定,接下来就可以用ctx.session来访问用户的session了。具体函数例子如下:

    router.get('/list', async function (ctx, next) { const keyword = ctx.query.keyword || '' if (ctx.query.isadmin) { //在session中获取用户的账号信息 if (ctx.session.username == null) { console.error('is admin, but no login') // 返回未登录 ctx.body = new ErrorModel('未登录') return } // 获取自己的用户名 author = ctx.session.username } //数据库里面查找该作者,该关键词的信息,然后返回 const listData = await getList(author, keyword) ctx.body = new SuccessModel(listData) })

    补充: 微信搜索【web小馆】,回复全栈博客项目,即可获取项目源码和后续的实战文章教程。每天用最简单朴实的语言,潜移默化的提升你的计算机基础知识和前端技术。小米粥,一个专注的web全栈工程师,我们下期再见!

    Processed: 0.009, SQL: 8