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

导语:
为了避免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全栈工程师,我们下期再见!

在这里插入图片描述
node后台

猜你喜欢

转载自blog.csdn.net/gitchatxiaomi/article/details/108947828
今日推荐