Nodejs Nestjs会话存储插件connect-redis的使用

Nodejs Nestjs会话存储插件connect-redis的使用
connect-redis 是一个用于 Node.js 的会话存储插件,它允许你将会话数据存储在 Redis 中。这在 NestJS 应用中非常有用,特别是当你需要在多个实例之间共享会话数据时。

以下是如何在 NestJS 项目中配置和使用 connect-redis 的步骤:

1. 安装依赖

首先,你需要安装必要的包:

npm install express @nestjs/platform-express connect-redis redis

2. 配置 Redis 会话

创建一个服务来初始化 Redis 会话中间件。例如,创建一个名为 session.service.ts 的文件:

import { Injectable } from '@nestjs/common';
import * as session from 'express-session';
import * as RedisStore from 'connect-redis';

@Injectable()
export class SessionService {
  createSession() {
    const RedisStoreInstance = RedisStore(session);
    return session({
      store: new RedisStoreInstance({
        url: 'redis://localhost:6379', // Redis URL
      }),
      secret: 'your-secret-key', // Secret key for session
      resave: false,
      saveUninitialized: false,
    });
  }
}

3. 在模块中应用会话中间件

在你的 NestJS 模块中(例如 app.module.ts),你可以通过 @Inject() 注入 SessionService 并应用会话中间件:

import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { SessionService } from './session.service';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService, SessionService],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    const sessionService = this.injector.get(SessionService);
    consumer.apply(sessionService.createSession()).forRoutes('*');
  }
}

4. 使用会话

现在你可以在控制器中使用会话了。例如:

import { Controller, Get, Req } from '@nestjs/common';
import { Request } from 'express';

@Controller('example')
export class ExampleController {
  @Get()
  getExample(@Req() request: Request) {
    let count = request.session.views || 0;
    request.session.views = ++count;
    return { views: count };
  }
}

以上就是如何在 NestJS 应用中配置和使用 connect-redis 的完整步骤。确保你的 Redis 服务器正在运行,并且配置正确。


3 回复

当然,没问题!想象一下,你正在构建一个魔法城堡(应用),而你需要一种方法来记住每个小精灵(用户)在城堡里做了什么。这时,connect-redis 就像是一个神奇的小本本,帮你记录下这些小精灵的信息。

首先,你需要安装这个魔法道具:

npm install connect-redis express-session

然后,在你的代码中召唤它:

const session = require('express-session');
const RedisStore = require('connect-redis')(session);

app.use(session({
  store: new RedisStore(), // 使用我们的魔法小本本
  secret: 'your-secret', // 这是你和小精灵之间的秘密密码
  resave: false,
  saveUninitialized: false
}));

现在,每当一个小精灵访问你的魔法城堡时,他们的信息就会被安全地记录在这个小本本上。你可以通过 req.session 来读写这些信息,就像是在和小精灵们对话一样!

希望这能帮到你,如果还有其他问题,随时召唤我!


connect-redis 是一个用于 Node.js 应用程序的 Redis 会话存储中间件,常与 Express 框架一起使用。对于 NestJS 应用来说,虽然它并不是基于 Express,但你可以通过适配层(如 @nestjs/platform-express)来使用 connect-redis

下面是如何在 NestJS 应用中使用 connect-redis 的步骤:

安装依赖

首先,你需要安装必要的包:

npm install @nestjs/platform-express @nestjs/session connect-redis ioredis

配置 Redis 会话

接下来,配置 Redis 会话存储。这里我们创建一个名为 session.provider.ts 的文件,用于设置会话服务。

import { DynamicModule, Module } from '@nestjs/common';
import * as session from 'express-session';
import * as connectRedis from 'connect-redis';
import { RedisClientType } from 'ioredis';

const RedisStore = connectRedis(session);

@Module({})
export class SessionProviderModule {
  static forRoot(redisClient: RedisClientType): DynamicModule {
    return {
      module: SessionProviderModule,
      providers: [
        {
          provide: 'SESSION_OPTIONS',
          useValue: {
            store: new RedisStore({ client: redisClient }),
            secret: 'your-secret-key', // 请替换为你的安全密钥
            resave: false,
            saveUninitialized: false,
          },
        },
      ],
      exports: ['SESSION_OPTIONS'],
    };
  }
}

使用会话模块

然后,在你的主应用模块中使用这个会话模块,并传递一个有效的 Redis 客户端实例。

import { Module } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { SessionProviderModule } from './session.provider';
import { RedisClientType } from 'ioredis';
import { createClient } from 'redis';

@Module({
  imports: [],
})
export class AppModule {}

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  
  const redisClient: RedisClientType = createClient({
    url: 'redis://localhost:6379' // 请根据实际情况调整
  });

  await redisClient.connect();

  app.useSession(await import('express-session').then(mod => mod.default));
  app.register(SessionProviderModule, { isGlobal: true }).use(async () => ({
    provide: 'SESSION_OPTIONS',
    useFactory: async () => {
      return app.get('SESSION_OPTIONS');
    },
  }));

  await app.listen(3000);
}
bootstrap();

以上就是在 NestJS 中集成 connect-redis 的基本方法。确保你的 Redis 服务器正在运行,并且配置了正确的连接信息。这将允许你在 NestJS 应用中使用 Redis 存储会话数据。

connect-redis 是一个用于 Node.js 的会话存储插件,常与 Express 框架搭配使用。在 NestJS 项目中,你可以使用它来将会话数据存储到 Redis 中,从而实现分布式环境下的会话共享。

首先安装所需的包:

npm install @nestjs/session@2 redis connect-redis

然后在你的 NestJS 应用程序中配置 SessionMiddlewareRedisStore

import { NestFactory } from '@nestjs/core';
import { SessionModule } from '@nestjs-session/core';
import * as session from 'express-session';
import * as RedisStore from 'connect-redis';

export async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  const RedisStoreClass = RedisStore(session);
  app.use(
    session({
      store: new RedisStore({ url: 'redis://localhost:6379' }),
      secret: 'my-secret',
      resave: false,
      saveUninitialized: false,
    }),
  );

  app.useGlobalPipes(new ValidationPipe());
  await app.listen(3000);
}

这样设置后,NestJS 应用中的会话数据将会存储在 Redis 服务器中。

回到顶部