切換語言為:簡體

在 Nest.js 中使用 Session 在不同請求間儲存資訊

  • 爱糖宝
  • 2024-08-01
  • 2058
  • 0
  • 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();

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.