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

   日期:2020-10-08     浏览:124    评论:0    
核心提示:导语:为了避免node后台太多的session,导致内存溢出还有各个后台进程之间不能通讯的问题,我们就要用到redis来存储session,来解决这一系列问题。1,创建文件conf,在其里面创建db.js,用于存放redis的账号还有密码。//根据开发或者生产模式来选择数据库const env = process.env.NODE_ENVlet MYSQL_CONFlet REDIS_CONFif (env === 'dev') { MYSQL_CONF = { host: '

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


 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服