Nest 快速上手 —— (三)中间件 / 异常过滤器

一、 中间件(Middleware)

1.特点

        中间件是一个在路由处理程序之前被调用的函数。中间件函数可以访问请求和响应对象,以及应用程序请求-响应周期中的next()中间件函数。下一个中间件函数通常由一个名为next的变量表示。

中间件函数可以执行以下任务:
        1、执行任何代码。
        2、对请求和响应对象进行更改。
        3、结束请求-响应周期。
        4、调用堆栈中的下一个中间件函数。
        如果当前中间件函数没有结束请求-响应周期,它必须调用next()将控制传递给下一个中间件函数。否则,请求将被挂起。

         支持依赖注入的方式进行使用

2.1 应用中间件

        LoggerMiddleware将被绑定到catscontroller内部定义的所有路由,除了传递给exclude()方法的三个路由。

//logger.middleware.ts
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';@Injectable()
export class LoggerMiddleware implements NestMiddleware {use(req: Request, res: Response, next: NextFunction) {console.log('Cross Middleware ,Request...');next();}
}
//app.module.ts
@Module({imports: [KeysModule, UsersModule, DatabaseModule, LoggerModule],controllers: [AppController],providers: [AppService],
})
export class AppModule implements NestModule {configure(consumer: MiddlewareConsumer) {consumer.apply(LoggerMiddleware)// 从中间件中排除一些路由//.exclude(//  { path: 'users', method: RequestMethod.GET },//  { path: 'users', method: RequestMethod.POST },//  'users/(.*)',//)// .forRoutes('users');// .forRoutes({ path: 'users', method: RequestMethod.GET });.forRoutes(UsersController);}
}

测试结果:

二、异常过滤器(Exception filters)

1.特点

        Nest有一个内置的异常层,负责处理整个应用程序中所有未处理的异常。当应用程序代码没有处理异常时,该层将捕获异常,然后自动发送适当的用户友好响应。

       当异常无法识别时(既不是HttpException也不是继承自HttpException的类),内置异常过滤器会生成以下默认JSON响应:


{"statusCode": 500,"message": "Internal server error"
}

 相关的HTTP 状态码,可以参考https://seo.juziseo.com/doc/http_code/

2.1 抛出标准的异常
  @Get()findAll() {// return this.keysService.findAll();throw new HttpException('Forbideden', HttpStatus.FORBIDDEN);}

2.2 自定义异常
//forbidden.exception.ts
export class ForBiddenException extends HttpException {constructor() {super('Forbidden', HttpStatus.UNAUTHORIZED);}
}
//keys.controller.ts
@Get()findAll() {// return this.keysService.findAll();// throw new HttpException('Forbideden', HttpStatus.FORBIDDEN);throw new ForBiddenException();}

2.3 Http内置的Http异常
  • BadRequestException
    • 客户端发送了一个服务器无法理解的请求。
  • UnauthorizedException
    • 客户端需要进行身份验证才能访问请求的资源。
  • NotFoundException
    • 服务器找不到请求的资源。
  • ForbiddenException
    • 客户端没有权限访问请求的资源。
  • NotAcceptableException
    • 服务器无法根据请求的内容特性完成请求。
  • RequestTimeoutException
    • 客户端请求超时。
  • ConflictException
    • 表示请求与服务器当前状态冲突。
  • GoneException
    • 表示请求的资源不再可用。
  • HttpVersionNotSupportedException
    • 表示服务器不支持请求中使用的 HTTP 版本
  • PayloadTooLargeException
    • 表示请求的负载过大,服务器无法处理。
  • UnsupportedMediaTypeException
    • 表示服务器不支持请求中的媒体类型。
  • UnprocessableEntityException
    • 表示服务器无法处理请求的实体。
  • InternalServerErrorException
    • 表示服务器遇到了意外的情况,无法完成请求。
  • NotImplementedException
    • 表示服务器不支持请求中要求的功能。
  • ImATeapotException
    • 表示服务器是一个茶壶,不支持被要求的操作。
  • MethodNotAllowedException
    • 表示服务器不支持请求中指定的方法。
  • BadGatewayException
    • 表示服务器作为网关或代理时从上游服务器接收到无效响应。
  • ServiceUnavailableException
    • 表示服务器暂时无法处理请求。
  • GatewayTimeoutException
    • 表示服务器作为网关或代理时无法从上游服务器获取响应,超时了。
  • PreconditionFailedException
    • 表示请求头中指定的条件不满足。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/670600.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Xshell 7启动报错 产品运行所需的信息检索失败

错误信息 产品运行所需的信息检索失败 请重新安装Xshell Code:40002 解决办法 1、把压缩包解压出来 2、在“!)绿化处理.bat”上面右键以管理员身份运行

高项-案例分析万能答案(作业分享)

项目管理:每天进步一点点~ 活到老,学到老 ヾ(◍∇◍)ノ゙ 何时学习都不晚,加油 一、通用问题原因: 1.项目经理管理经验不足,没有及时发现和解决xx方面的问题。 2.项目管理计划没有得到关键干系人的评审确…

PM - ICE 评分模型:快速的优先级排序框架

ICE 评分模型(Impact, Confidence, Ease)是一种项目管理和决策工具,广泛用于优先排序和决定应该优先实施哪些项目或任务。 它是由 Sean Ellis 提出的,主要用于增长黑客领域,帮助团队识别和优先处理能带来最大增长的机…

MaxKB宝塔Docker安装并配置域名访问

准备 Linux系统 bt面板 默认环境LNMP随便装 服务器环境配置最好是4G, 占用硬盘存储大概1G 对于一些海外AI产品的对接需要使用香港或者海外的服务器 安装 在宝塔面板中打开SSH或者你本地使用SSH工具去链接服务器 运行docker命令 前提是放开服务器的8080端口 doc…

javaweb学习week7

javaweb学习 十四.Springboot 1.配置优先级 Springboot中支持三种格式的配置文件: 注意:虽然Springboot支持多种格式配置文件,但是在项目开发时,推荐使用一种格式的配置(yml是主流) Springboot除了支持…

与Apollo共创生态:助力自动驾驶迈向新台阶

引言Apollo七周年大会企业协同工具链携手伙伴共创生态未来展望与总结 引言 2024年4月19日,一场智能汽车未来的盛宴正朝我们走来——Apollo开放平台的七周年大会。 此次大会主题为“破晓•拥抱智变时刻”其中“破晓”象征着新时代的曙光,意味着智能汽车技…

数据库原理与应用实验三 嵌套查询

实验目的和要求 加深和掌握对嵌套查询的理解和应用 实验环境 Windows10 SQLServer 实验内容与过程 图书(书号,书名,价格,出版社) 读者(卡号,姓名,年龄,所属单位&a…

docker安装redis命令及运行

docker安装redis: docker run -d -p 6379:6379 --name redis redis:latest -d: 以 守护进程模式 运行容器,容器启动后会进入后台运行,并脱离当前命令行会话。 -p: 显示端口号。 -p 6379:6379: 将容器内部的 6379 端口映射到宿主机 6379 端…

数据结构学习/复习8--树与二叉树的概念与基本性质练习

一、树 1.概念 2.树的表示 二、二叉树 1.二叉树的概念 2.与性质相关的题

数据分析从入门到精通 2.pandas修真之前戏基础

从爱上自己那天起,人生才真正开始 —— 24.5.6 为什么学习pandas numpy已经可以帮助我们进行数据的处理了,那么学习pandas的目的是什么呢? numpy能够帮助我们处理的是数值型的数据,当然在数据分析中除了数值型的数据还有好多其他类型…

JAVA学习14——异常

目录 异常: 1.异常基本介绍: 2.异常体系图: 3.五大运行时异常: (1)NullPointerException空指针异常: (2)AirthmetiException数字运算异常: &#xff0…

C++学习笔记——对仿函数的理解

文章目录 思维导图仿函数出现的逻辑仿函数使用上的巧妙 仿函数的本质仿函数的优势仿函数语法的巧妙 思维导图 仿函数出现的逻辑 我们在学习stack时会遇到一些新的问题,这些问题需要我们使用非类型模板参数去解决,即我们需要在设计类时需要有一个途径去快…