nest 会话 Session

时间:2023-01-12 浏览:174 分类:NestJS

HTTP 会话提供了一种跨多个请求存储用户信息的方法,这对 MVC 应用程序特别有用。

使用方法:

第一步:安装依赖

$ npm i express-session
$ npm i -D @types/express-session

第二步:全局加载中间件

//main.ts

import * as session from 'express-session';

app.use(
  session({
    secret: 'my-secret',
    resave: false,
    saveUninitialized: false,
    cookie: {maxAge: 10000, httpOnly: true},  //以cookie存储到客户端
    rolling: true    // 每次重新请求时,重新设置cookie
  }),
);

设置session参数有:

  • secret String 生成session签名的密钥

  • name String 客户端的cookie的名称,默认为connect.sid, 可自己设置

  • resave Boolean 强制保存 session 即使它并没有变化, 默认为true, 建议设置成false

  • saveUninitalized Boolean 强制将未初始化的 session 存储。当新建了一个 session 且未设定属性或值时,它就处于 未初始化状态。在设定一个 cookie 前,这对于登陆验证,减轻服务端存储压力,权限控制是有帮助的。默认:true, 建议手动添加

  • cookie Object 设置返回到前端cookie属性,默认值为{ path: ‘/’, httpOnly: true, secure: false, maxAge: null }

  • rolling Boolean 在每次请求时强行设置 cookie,这将重置 cookie 过期时间, 默认为false

第三步:设置session

@Get()
findAll(@Req() request: Request) {
  request.session.visits = request.session.visits ? request.session.visits + 1 : 1;
}

第四步:获取session

import {Req, Session} from '@nestjs/common';

@Get()
  findAll(@Req() req, @Session() session ){
    //获取session:两种方式
    console.log(req.session.username)   // 第一种
    console.log(session.username)    // 第二种
    
    return 'session'
}