【node.js】学习篇:如何在koa2项目中使用redis

【node.js】学习篇:如何在koa2项目中使用redis

首先我们电脑上需要安装 node.js这是我在写着个笔记的时候,当前的系统的node版本,仅供参考

node -v
v14.19.1

这里默认你已经有一定的node基础,并且已经拥有了 Koa2 项目

安装 redis

npm i redis -D

然后还需要安装下面的依赖:

// koa 项目连接 redis 需要的依赖
npm i koa-redis --save  

// koa 项目生成 session 的工具
npm i koa-generic-session --save

编写存储配置:

在 src目录下 新建一个 conf 文件夹 然后新建db.js文件 并写入如下配置:

这样做的意义是方便统一管理

/**
 * @description redis 存储配置
 * @author mosaic
 */

const REDIS_CONF = {
  port: 6379,
  host: '127.0.0.1'
}

module.exports = REDIS_CONF

建立连接:

在 src目录下 新建一个cache文件夹 然后新建一个_redis.js 文件,并写入如下代码:

/**
 * @description 链接 redis 的方法 get set
 * @author mosaic
 */
const redis = require('redis')
const { REDIS_CONF } = require('../conf/db')

// 创建客户端
const redisClient = redis.createClient(REDIS_CONF.port.REDIS_CONF.host)
redisClient.on(() => {
  console.log('123 :>> ', 123)
})

定义 redis 的set操作函数:

/**
 *
 * set
 * @param {string} key 键
 * @param {string} val 值
 * @param {number} [timeout=60 * 60] 过期时间 单位s
 */
const set = (key, val, timeout = 60 * 60) => {
  // 这里需要判断一下,如果传递的val值是对象,我们需要将其转换为json字符串再进行存储
  if (typeof val === 'object') {
    val = JSON.stringify(val)
  }
  redisClient.set(key, val)
  redisClient.expire(key, timeout)
}

定义 redis 的 set 操作函数:

/**
 *
 * get
 * @param {string} key
 * @return {promise}
 */
const get = (key) => {
  // 因为涉及到IO操作,所以是异步处理,需要用promise包装一下
  const promise = new Promise((resolve, reject) => {
    redisClient.get(key, (err, val) => {
      if (err) {
        reject(err)
      }
      if (val == null) {
        resolve(val)
      }
      try {
        resolve(JSON.parse(val))
      } catch (error) {
        resolve(val)
      }
    })
  })
  return promise
}

随后就可以导出使用了:

module.exports = {
  set,
  get
}

引入使用:

我们需要来到 app.js 中引依赖,并注册中间件。

// app.js
...
const session = require('koa-generic-session')
const redisStore = require('koa-redis')
const REDIS_CONF = require('./conf/db')
...
// 注册 redis 中间件的方法要写在路由的上面
// session
app.keys = ['UfBhjR#!A@_$343'] // 密匙 负责加密session信息
app.use(
  session({
    key: 'user.sid', // 键
    prefix: 'user:session:', // 前缀
    cookie: {
      path: '/', // 允许客户端哪些路径使用
      httpOnly: true, // 只允许在session端修改cookie
      maxAge: 24 * 60 * 60 * 1000 // 过期时间
    },
    store: redisStore({
      all: `${REDIS_CONF.host}:${REDIS_CONF.port}`
    })
  })
)
//routes
app.use(index.routes(), index.allowedMethods())
...

测试是否生效:

这时候我们就可以来到routers文件夹下的 index.js 去编写代码,测试session是否生效了

// routers/index.js
// 写入下面 + 号后的代码
...
router.get('/json', async (ctx, next) => {
  + const sessionVal = ctx.session
  + if (sessionVal.viewNum == null) {
  +  sessionVal.viewNum = 0
  + }
  + sessionVal.viewNum++
  ctx.body = {
    title: 'koa2 json',
  + viewNum: sessionVal.viewNum
  }
})
...

之后我们启动项目,去访问对应的 json 路由:

XILxI7

可以看到,我们的session已经成功生效。至此,简单的配置完毕。

posted @   捡破烂的小z  阅读(122)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示