前言
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 文件
使用方式
使用
@Req
修飾器:
import { Controller, Get, Res } from '@nestjs/common'; import { Request } from 'express'; @Get() findAll(@Req() req: Request) { req.session.username = 'admin'; }
使用
@Session
修飾器:
import { Controller, Get, Session } from '@nestjs/common'; import { Request } from 'express'; @Get() findAll(@Session() session: SessionInfo) { session.username = 'admin'; }
常用方法
設定會話資料:
session.userName = 'admin'
獲取會話資料:
session.userName // admin
刪除會話資料
delete session.userName;
銷燬整個會話
session.destroy();