当前位置: 首页 > news >正文

Nest 中的数据库集成、JWT身份认证与任务调度全解析

1. 集成 PostgreSQL 数据库

1.1. 集成步骤

在 NestJS 中集成 PostgreSQL 数据库可以通过 TypeORM 来实现。以下是详细的集成步骤:

  • 安装依赖:使用 npm 安装 TypeORM 和 PostgreSQL 驱动。

npm install @nestjs/typeorm typeorm pg
  • 配置数据库连接:在 app.module.ts 中配置 TypeORM 模块,指定数据库类型、主机、端口、用户名、密码、数据库名称以及实体文件路径。

  • 实现查询操作:通过定义 Repository 来对数据库进行增删改查操作。

1.2. 工作原理

  • ORM:ORM 是一种程序设计技术,用于将不同类型的数据进行转换,实现面向对象编程语言与数据库之间的交互。TypeORM 是一个 ORM 工具,提供了对 PostgreSQL 的支持,可以自动管理数据库的迁移、连接和查询。

  • TypeORM:作为对象关系映射工具,TypeORM 提供了装饰器来定义实体、列、关系等,简化了数据库操作。

2.  实现 JWT 身份认证

2.1. JWT 身份认证原理

JWT身份认证是通过在用户登录后生成一个加密的令牌,并在后续的请求中附带该令牌以证明用户身份。Nest 使用 @nestjs/jwt 和 @nestjs/passport 实现身份认证。

2.2. 实现步骤

  • 安装必要的包。

npm install @nestjs/jwt @nestjs/passport passport passport-jwt
  • 配置 JWT 模块:在 auth.module.ts 中配置 JWT 模块,指定密钥和令牌有效期。

  • 实现 JWT 策略:创建 JWT 策略类,通过 passport-jwt 来验证令牌。

  • 用户认证与生成 Token:在登录时,通过 jwtService.sign() 方法生成令牌。

2.3. 工作原理

  • 用户登录时,服务器通过 jwtService.sign() 生成一个包含用户信息的 JWT 令牌。

  • 在后续请求中,用户需要在请求头中附带此令牌,服务器通过 JWT 策略对令牌进行验证,确保请求来自合法用户。

2.4. 拓展:单点登录 SSO

  • Cookie:常规系统可使用,但不具备跨平台能力,无法通用化。

  • 单 Token(AccessToken):具备跨平台能力,但时效性不好控制,缺乏安全性。

  • 双 Token(RefreshToken + AccessToken):常见实现无感刷新 Token 的方案。

  • Token + Cookie:结合使用,提高安全性和用户体验。

3.  实现定时任务和任务队列管理

3.1. 定时任务

  • 安装 @nestjs/schedule 包。

npm install @nestjs/schedule
  • 在服务中引入 Cron 装饰器:通过 Cron 表达式定义任务的执行时间。

3.2. 任务队列管理

  • 安装 @nestjs/bull 包。

npm install @nestjs/bull bull
  • 配置任务队列:在 app.module.ts 中配置 Bull 模块,指定 Redis 连接信息。

  • 创建任务队列:定义队列服务,通过 @InjectQueue 注入队列实例,实现任务的添加和处理。

3.3. 工作原理

  • 定时任务:通过 Cron 表达式定义任务的执行时间,当达到设定时间时,任务会自动触发执行。

  • 任务队列:通过 Bull 模块,任务可以被加入 Redis 中的任务队列,并根据优先级或延时执行。队列支持任务的重试、失败处理和并发处理,适用于复杂的任务调度和分布式任务处理。

http://www.dtcms.com/a/399892.html

相关文章:

  • 中小型企业网站建设与管理设计制作软件
  • 常德网站建设套餐报价怎么制作公司网页教程
  • 音频基础知识
  • 如何在网上建立自己的网站自助建站信息网
  • 网站域名找回密码 用户名景区网站的建设公司
  • HTML应用指南:利用GET请求获取全国奥迪授权经销商门店位置信息
  • golang基础语法(三)常量、指针、别名、关键字、运算符、字符串类型转换
  • 普定县建设局网站河北seo平台
  • dify-随笔
  • 免费开店的平台有哪些标题优化方法
  • seo顾问服务公司站长怎么做软文网站
  • 【JNA】JAVA使用JNA调用C++ dll文件(3)编译Linux版本.so文件
  • MyBatis 操作数据库(⼊⻔)
  • [baka编程]初入C++,如何理解新概念——类和对象
  • 竞价网站做推广一款app是如何制作出来的
  • 北京建设银行网站广东官网网站建设平台
  • 淘宝客怎么在网站做推广网站每年续费费用
  • Pyside6 + QML - 多线程01 - QThread 基础(子线程执行耗时任务)
  • 农产品应该建设哪个网站屏幕分辨率 网站开发
  • 摄影作品展示网站flash全站源码山东住建部和城乡建设官网
  • 购物网站功能模块图使用div建设的网站
  • Python爬虫实战:获取上海石油天然气交易中心2025年液化天然气交易数据并做分析
  • springboot项目添加请求url及请求入参日志
  • Spring XML 配置简介
  • 阿里云虚拟主机如何上传网站国外flash网站
  • NXP - 安装后的MCUXpresso IDE里面有所有的支持包,不用另外去下载
  • 公司网站域名更改怎么做做美团旅游网站多少钱
  • 网站建设初稿wordpress 教學
  • 【nvm for windows安装问题】手动安装方案
  • 网站定制开发怎么写网站后台管理系统图片