Nest.js 实战 (六):使用 Session 在不同请求间存储信息

发布于:2024-08-01 ⋅ 阅读:(139) ⋅ 点赞:(0)

前言

Session 是记录客户状态的机制,为每个用户的浏览器创建的一个会话对象,今天我们来看一下怎么在 Nest.js 中使用 Session

安装依赖

pnpm add express-session
pnpm add @types/express-session -D

全局配置

安装完成后,在 main.ts 中将 express-session 配置为全局中间件:

import session from 'express-session';

// 配置 session
app.use(
  session({
    secret: 'baiwumm', // 签名
    resave: false, // 强制保存 sseion 即使它并没有变化,默认为true
    saveUninitialized: false, // 强制将未初始化的 session 存储
  }),
);

参数说明

属性 类型 默认值 是否必填 描述
secret string - 用于加密 session ID 的秘密字符串。强烈建议使用一个足够长且随机的字符串
resave boolean true 是否在每次请求时保存 session,即使 session 没有更改。通常设置为 false 以提高性能
saveUninitialized boolean true 是否为尚未初始化的 session 创建新的 session 对象。通常设置为 false 以避免不必要的数据库写入
name string connect.sid 设置 session ID 的名称

更多参数请参考:Api 文档

使用方式

  1. 使用 @Req 修饰器:
import { Controller, Get, Res } from '@nestjs/common';
import { Request } from 'express';

@Get()
findAll(@Req() req: Request) {
  req.session.username = 'admin';
}
  1. 使用 @Session 修饰器:
import { Controller, Get, Session } from '@nestjs/common';
import { Request } from 'express';

@Get()
findAll(@Session() session: SessionInfo) {
 session.username = 'admin';
}

常用方法

  1. 设置会话数据:
session.userName = 'admin'
  1. 获取会话数据:
session.userName // admin
  1. 删除会话数据
delete session.userName; 
  1. 销毁整个会话
session.destroy();

网站公告

今日签到

点亮在社区的每一天
去签到