Nest.js学习笔记(八)

简介: 本节利用Nest.js写了一个简单的session案例,实现了前后端验证码交互

本节介绍一个登录案例,前后端通过输入验证码判断用户是不是机器人

  1. 安装expression-session

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

  1. 安装验证码生成模块svgCaptcha

pnpm add svg-captcha

  1. 在main.ts中使用express-session
app.use(session({
  // 一段随机字符串(加盐)
    secret:'xiaoman',
  // 强制重新保存会话,即使在请求过程中它未被修改过
    rolling:false,
  // 设置cookie的名称
    name:'xiaoman.sid',
  // cookie相关选项
    cookie:{
      httpOnly:true,
      // 设置cookie的生存时间,以毫秒为单位
      maxAge:1000
    }
}))
  1. 创建验证码并返回给前端
// 必须使用这种导入方式,直接导入svgCaptcha将会变成undefined
import * as svgCaptcha from 'svg-captcha';

@Controller('user')
export class UserController {
  constructor(private readonly userService: UserService) {}

  @Get('code')
  verification(@Req() req, @Res() res) {
    const captcha = svgCaptcha.create({
      size: 4,//生成几个验证码
      fontSize: 50, //文字大小
      width: 100,  //宽度
      height: 34,  //高度
      background: '#cc9966',  //背景颜色
    })
    // 将验证码存储在前端的session对象中
    req.session.code = captcha.text
    // 设置响应类型,如果不写+xml的话客户端会提示下载文件,加了后就可以直接展示在页面上了
    res.type('image/svg+xml')
    // 这将把cookie也一起带出去
    res.send(captcha.data)
  }

关于req.session:

HTTP session提供了一个用于在不同请求间存储信息的方法,个人理解是将信息存储在客户端的请求头中,每次客户端输入验证码都会将输入的内容和请求头中的session进行比较,并且这里的session可以在多个请求间共享。

那为什么不在后端随便定义一个变量呢?

答:只有一个请求的时候当然OK,但请求多了你怎么办,全部存在服务器中浪费资源,而且还得动态分配,开销太大了。

相关文章
|
5月前
|
JavaScript 前端开发 API
Vue学习笔记3:对比纯JavaScript和Vue实现数据更新的实时视图显示
Vue学习笔记3:对比纯JavaScript和Vue实现数据更新的实时视图显示
|
5月前
|
Web App开发 前端开发 JavaScript
HTML/CSS/JS学习笔记 Day3(HTML--网页标签 下)
HTML/CSS/JS学习笔记 Day3(HTML--网页标签 下)
|
4月前
|
JavaScript 前端开发
【干货分享】JavaScript学习笔记分享
【干货分享】JavaScript学习笔记分享
73 0
|
7月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的云的学习笔记系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的云的学习笔记系统附带文章源码部署视频讲解等
59 0
|
9月前
|
移动开发 JavaScript 前端开发
webgl学习笔记3_javascript的HTML DOM
webgl学习笔记3_javascript的HTML DOM
89 0
webgl学习笔记3_javascript的HTML DOM
|
9月前
|
JavaScript 前端开发 Java
webgl学习笔记2_javascript基础快速学习
webgl学习笔记2_javascript基础快速学习
66 0
|
9月前
|
前端开发 JavaScript API
JavaScript学习笔记(一)promise与async
JavaScript学习笔记(一)promise与async
|
9月前
|
存储 JavaScript
【ES6系列第二篇】适用JS初学者的Set对象和Map对象学习笔记
【ES6系列第二篇】适用JS初学者的Set对象和Map对象学习笔记
64 0
|
存储 JavaScript 前端开发
【js】函数概述学习笔记(8)
【js】函数概述学习笔记(8)
53 0
|
存储 JavaScript
【js】数组学习笔记(7-2)
【js】数组学习笔记(7-2)
82 0

热门文章

最新文章

  • 1
    当面试官再问我JS闭包时,我能答出来的都在这里了。
    40
  • 2
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    27
  • 3
    Node.js 中实现多任务下载的并发控制策略
    32
  • 4
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    26
  • 5
    【JavaScript】深入理解 let、var 和 const
    49
  • 6
    【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
    47
  • 7
    【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
    56
  • 8
    【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
    57
  • 9
    如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
    72
  • 10
    【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
    55