Nestjs从入门到进阶
文章平均质量分 86
学习 Nest 全部功能,并且会顺带把 mysql、mongodb、redis、rabbitmq、nacos 等后端中间件学一遍,也会学习 pm2、docker、docker compose 等部署方案
枫ゞ
在职前端开发工程师一枚,2022年博客之星前端领域 TOP 9,NestJs 从入门到进阶暂时停更 目前在写Vue3.4源码 等源码写完继续更新
展开
-
第二十三章 Nest集成日志框架Winston
Winston是一个非常流行的Node.js日志框架,而Nest.js是一个基于Node.js的后端框架。修改 winston.module.ts 内容如下 添加 forRoot 方法,接收 winston 的 createLogger 方法的参数,返回动态模块的 providers、exports。这里用到了 printf 的 format 函数,它可以自定义打印的日志格式 且使用了chalk 加上了颜色,并且打印了 dayjs 格式化的时间。可以看到控制台打印了自定义的 logger 的自定义。原创 2024-07-22 12:44:26 · 507 阅读 · 0 评论 -
第二十二章 了解集成日志框架Winston
winston中 内置的和社区的 transport 就足够用了,不管是想把日志发送到别的服务,还是把日志存到数据库等,都可以用不同 Transport 实现。运行 项目 可以看到不同分钟3/打印的日志会写到不同的文件中 并且使用了 DailyRotateFile 的 transport指定了文件名和日期格式。接着创建 index.js 并使用winston, 用winston 中的createLogger 创建 logger 实例。winston是一个用于Node.js的日志记录库。原创 2024-07-22 08:59:57 · 979 阅读 · 0 评论 -
第二十一章 Nest 日志打印
与 console.log 不同,Nest 的日志 API 允许您将不同级别的日志记录到不同的目标,例如文件、数据库或外部日志服务。在之前 我们打印日志信息的时候 都是通过 console.log 来打印信息 ,但是这样打印 存在很多缺陷 例如没有日志的不同级别的区分不能通过开关控制是否打印等等。可以看到打印出了如下信息,其中 verbose、debug、log、warn、error 是日志的级别,[] 是 context(当前所在的上下文),最后是日志的内容。原创 2024-07-17 15:00:00 · 735 阅读 · 0 评论 -
第二十章 Nest 大文件分片上传
在前端的文件上传功能中,只要请求头里定义 content-type 为 multipart/form-data,内容就会以下面形式传递到服务端,接着服务器再按照multipart/form-data的格式去提取数据 获取文件数据但是当文件体积很大时 就会出现一个问题 文件越大 请求的时间会越长,会导致产品的体验很不好。原创 2024-07-17 09:00:00 · 819 阅读 · 0 评论 -
第十九章 Nest multer 文件上传
新建个 nest 项目:安装 multer 的 ts 类型的包:接着创建一个接口,用于文件上传 下面的test1接口就是用于文件上传使用 FileInterceptor 来提取 file 字段,然后通过 UploadedFile 装饰器把它作为参数传入接着运行项目可以看到我们的项目根目录下创建了一个uploads名称的文件夹在nestjs项目中设置支持跨域修改main.ts:接着 我们来编写前端的代码,创建index.html运行前端:浏览器访问:上传文件之后可以看控制台看到打印了上传的fil原创 2024-07-11 14:45:00 · 1011 阅读 · 0 评论 -
第十八章 Express multer 文件上传
本章将学习Express multer 文件上传 ,因为Nest 的文件上传是基于 Express 的中间件 multer 实现的,所以在学习 Nest 文件上传之前,我们先学习下 multer 包。接着我们在express 里添加错误中间件,一旦某个中间件出了错,express 就会向后找错误处理中间件来调用,如果没有,那就用默认错误处理中间件,返回 500 响应。接着点击选择文件 上传文件 看游览器的控制台 可以看到发送了请求 此时aaa 请求的 body 是多个 boundary 分隔的格式。原创 2024-07-11 10:00:00 · 626 阅读 · 0 评论 -
第十七章 自定义ExceptionFilter
在nestjs中,Exception Filter(异常过滤器)是用于处理全局异常的一种机制。可以看到提示的错误不对, exception filter 会拦截所有 HttpException,但是没有对这种情况做支持。但是目前只是@Catch 了 BadRequestException的异常 如果抛出的是其他异常 那么依然是原来的格式。接着我们修改 test.filter.ts 实现对ValidationPipe的支持。自此ValidationPipe 的错误和其他的错误就都返回了正确的格式。原创 2024-07-10 14:00:00 · 540 阅读 · 0 评论 -
第十六章 ValidationPipe验证post请求参数
我们再调用接口 age参数传11.23 也能调用成功 但是我在dto定义的时候 只定义了age 为number 但是传浮点数也能传,这个可能会导致后面的逻辑错误,所以就需要用到 ValidationPipe。我们创建了一个dto类 ----> 接着在pipe拿到类 将参数通过class-transformer 转换为 dto 类的对象,最后使用class-validator 包来对这个对象做验证。注意:post请求带参数 我们通过游览器路径是直接请求不了的 需要使用postman 来发 post 请求。原创 2024-07-10 09:15:00 · 368 阅读 · 0 评论 -
第十五章 Nest Pipe(内置及自定义)
浏览器访问这就是Pipe返回的值控制台打印了 value 就是 query、param 的值,而 metadata 里包含 type、metatype、datatype 就是 @Query、@Param、@Body 装饰器,或者自定义装饰器metatype 是参数的 ts 类型data 参数值。原创 2024-07-08 09:03:09 · 925 阅读 · 0 评论 -
第十四章 RxJS及Interceptor
首先 我们来了解一下RxJS,RxJS是一个基于观察者模式的响应式编程库,它是ReactiveX的JavaScript版本。它提供了一组强大的操作符和工具,用于处理异步数据流。通过使用RxJS,开发者可以轻松地处理各种异步操作,如处理用户输入、处理网络请求、处理定时器等等。它使用Observable对象来表示数据流,并提供了各种操作符来转换、过滤和组合数据流中的值。RxJS的主要思想是将异步操作看作是一个数据流,并通过操作符来处理这个数据流,从而简化异步编程和数据流处理的复杂性。原创 2024-07-08 09:00:33 · 1536 阅读 · 0 评论 -
第十三章 Nest Middleware
可以看到只有 / /test 这两个接口才调用到Middleware中间件 以上就是 Nest 里 middleware 的用法。可以看到上面图片 Middleware 是通过class实现的,使用class实现可以让我们进行依赖注入,例如。可以看到 我们调用了service,这就是 Nest 注入的依赖。这样调用接口的时候就会使用到TestMiddleware。当然我们也可以指定一些路由用到Middleware,接着我们访问需要知道到中间件的接口 例如。原创 2024-07-04 13:00:00 · 325 阅读 · 0 评论 -
第十二章 Nest中 Express 和 Fastify
其可以通过use一个个中间件来处理请求和返回响应(洋葱模型),我们基于这些中间件能实现各种功能 ,但Express 只是一个处理请求的库,没有开发规范和组织架构的能力,会导致写出来的代码参差不齐 不同人写的代码会差距可能很大。是一个处理请求、响应的库。注意 Nest没有和 Express 进行强耦合 而是做了一层抽象,之后分别提供了 express 和 fastify 的实现,所以我们可以在Nest项目灵活的切换express和 fastify。第一层:直接使用 http、https 的模块。原创 2024-07-04 09:00:00 · 2092 阅读 · 0 评论 -
第十一章 Nest 创建动态模块
但是这个模块目前是静态的 内容固定不变 当我们想在mport 的时候给这个模块传一些参数,动态生成模块的内容 就可以使用 Dynamic Module动态模块。forFeature 是用于在特定模块中注册模块的方法。它将模块中的提供者和导出的模块注册为仅在该模块中可访问的。forRoot 是用于在根模块中注册模块的方法。它将模块中的提供者和导出的模块注册为全局可访问的,这意味着其他模块可以直接使用这些提供者和导出的模块。这样我们就可以在 import 一个模块的时候,传入参数,然后动态生成模块的内容。原创 2024-07-02 12:00:00 · 1120 阅读 · 0 评论 -
第十章 Nest 解决Module和Provider循环依赖问题
如果 Test1Module 需要使用 Test2Module 中的一个服务,而 Test2Module 同样需要使用 Test1Module 中的服务,就会出现循环依赖。错误的原因是模块之间的依赖循环 报错的提示说了 我们可以使用 forwardRef() 来解决这个问题。forwardRef 的作用就是先进行创建 单独创建两个module 都创建成功之后再进行引入。除了Module 之间会循环依赖 provider 之间也会有循环引用的异常报错问题。可以看到报错了 是循环依赖引起的报错。原创 2024-07-02 09:00:00 · 384 阅读 · 0 评论 -
第九章 Nest 自定义装饰器
这个函数创建了一个参数装饰器MyHeaders,用于在NestJS中获取HTTP请求的头部信息。在装饰器函数内部,通过ctx.switchToHttp().getRequest()切换到HTTP上下文并获取请求对象。在app.controller.ts 中 新增接口test3 使用上面定义的 @Param() 装饰器。修改 app.controller.ts 新增getTest函数 使用 自定义的Test装饰器。我们来尝试一下,实现一个获取请求头信息的装饰器。此时 三个接口的装饰器实现的效果都是一样的。原创 2024-07-01 12:00:00 · 892 阅读 · 0 评论 -
第八章 Nest ArgumentHost 和 ExecutionContext
ExecutionContext类包含了处理器方法的上下文信息,它提供了一系列方法来获取请求的原始对象、路由处理器、控制器实例等。ArgumentHost类包含了请求的上下文信息,它提供了一个统一的方式来访问请求参数、头部、查询参数等。在NestJS中,ArgumentHost和ExecutionContext是两个常用的类,用于处理请求和返回的上下文信息。可以看到 打印出的信息就是 test.filter.ts 里的console.log 打印出来的信息。原创 2024-07-01 09:00:00 · 913 阅读 · 0 评论 -
第七章 Nest 装饰器
NestJS是一个基于Node.js的开发框架,它使用装饰器来增强应用程序的功能和可读性。装饰器是一种特殊的语法,可以附加元数据或修改类、方法、属性等的行为。原创 2024-06-28 13:00:00 · 1092 阅读 · 0 评论 -
第六章 AOP架构 Middleware、Guard、Pipe、Interceptor、ExceptionFilter
Nest AOP 是指在 Nest.js 框架中使用面向切面编程(Aspect-Oriented Programming)的技术。面向切面编程是一种编程范式,它允许开发者通过在代码中定义切面(Aspect),来将横切关注点(Cross-cutting Concerns)与核心业务逻辑进行解耦。在 Nest.js 中,开发者可以使用 Nest AOP 模块来实现 AOP 功能。通过使用装饰器(Decorator)来定义切面,并使用注入依赖(Dependency Injection)来实现对切面的使用。原创 2024-06-28 12:00:00 · 891 阅读 · 0 评论 -
第五章 Nest 生命周期
nest 有着以下生命周期:1. onModuleInit()2. onApplicationBootstrap()3. onModuleDestroy()4. onApplicationShutdown()原创 2024-06-27 12:00:00 · 1036 阅读 · 0 评论 -
第四章 Nest provider
实现我们先创建一个nest 项目。原创 2024-06-27 09:00:00 · 541 阅读 · 0 评论 -
第三章 Nest 断点调试项目
我们将学习用VSCode 来调试nest项目 首先打开VSCode 软件 可以看到左侧的图标如下(这里我用的中文版插件 大家可以安装插件)我们点击上面的 创建 **launch.json **文件 接着我们可以在项目中看到 launch.json。接着我们可以点击左侧圈红的地方 打断点 点击右侧圈红的地方开始一行行调试。我们可以通过打断点的方法 ,了解代码的执行过程。接着运行 demo.js 以调试模式跑起来。接着我们可以打断点 如下 再次刷新界面。首先我们先了解node项目的调试流程。原创 2024-06-25 13:00:00 · 950 阅读 · 0 评论 -
第二章 快速认识 IoC
在后端的系统中 会有很多对象 比如Controller 对象(接收 http 请求,调用 Service,返回响应数据)、Service 对象(实现业务逻辑)、Repository 对象(实现对数据库的增删改查)、DataSource 对象(数据库链接)、 Config 对象 (配置对象 )这些对象之间的关系很复杂 且有些对象需要一系列的初始化之后吃能使用 有些对象不需要每次都new一个新的,而IoC就是用来解决这些痛点,Nest就是使用Ioc来实现的。nest 在背后自动做了对象创建和依赖注入的工作。原创 2024-06-25 09:00:00 · 967 阅读 · 0 评论 -
第一章 快速掌握 Nest CLI
不使用 --skip-import 时可以看到 src/app.model.ts 被更新了 说明被引入了 ,但是使用了 --skip-import 时只有创建 没有更新src/app.model.ts 说明没有被引入。可以看到生成的目录结构不一样 --no-flat 和默认 会生成 www文件夹(目录),而 --flat 不会生成文件夹(目录)-b, --builder [name] 要使用的构建器(tsc, webpack, swc)。-g, --skip-git 跳过git存储库初始化。原创 2024-06-24 09:00:00 · 1321 阅读 · 0 评论