Netjs框架基础

一、框架介绍

Nestjs 是以用于构建高可用可伸缩的后端应用框架,并且全面支持 Typescript

在背后,Nestjs 使用了强大的 http 框架 (默认是 express),并且可以配置选择其他的 Http 服务框架

二、Controllers 和 Router

Controller 主要是用于处理服务端请求,并且返回服务端的响应

Controller 的主要目标是接受服务请求,Router 机制控制哪个控制器接收哪个请求,一般来说一个 Controller 可以配多个 Route,不同的 Route 能够形成不同的动作。在 Nestjs 框架中,我们使用 Class 和 Decorators ,Nestjs 内部会根据 Decorator metadata 创建路由映射

一些相关的注解

注解详情
@Request(), @Req()req
@Response(), @Res()*res
@Next()next
@Session()req.session
@Param(key?: string)req.params / req.params[key]
@Body(key?: string)req.body / req.body[key]
@Query(key?: string)req.query / req.query[key]
@Headers(name?: string)req.headers / req.headers[name]
@Ip()req.query / req.ip
@HostParam()req.hosts

三、Providers 和 Services

Providers 是 Nestjs 中一个极为实用的概念,他的主要意义的能够作为依赖被注入使用。这意味着对象之间可以创建各种关系,“连接”对象实例的功能可以在很大程度上委托给 Nest 运行时系统(Nestjs 框架本身提供了依赖管理注入的功能)

Services 是 Nestjs 框架中负责处理业务逻辑的部分,它通常会被 @Injectable 修饰成为 Provider,供 Controller 注入使用

四、Modules

Modules 是一个被 @Module 装饰的 Class,@Module 提供了 Nestjs 框架组织应用结构的原信息。

在这里插入图片描述

每个应用都至少有个 Module 作为 Root Module,这是 Nestjs 框架构建、解析应用的起点。@Module 注解使用对象来描述 Module,整体的应用应该是有多个 Module 构成的

属性详情
providers当前 Service 可以被注入到当前模块中使用
controllers该模块中所有涉及请求的 Controller
imports导出此模块所需的提供程序的导入的依赖的模块列表
exports是当前 providers 的子集,当其他模块导入此模块时,可以提供 exports 内部的
Service可以将模块中导出的提供程序视为模块的公共接口或 API

五、Middleware

Middleware 是一个在 Router 处理前被调用的函数,这个函数能够访问 request、response、next 三个变量对象

在这里插入图片描述

默认情况下,Nestjs 的 Middleware 可以等效于 express 的 Middleware, 一般用于下面的场景

执行一些代码逻辑

有机会改变 request 和 response 对象

结束当前响应

调用 next() 方法,进入后续的流程

如果当前中间件没有当前响应活着没有调用 next() 方法,该请求将挂起

Middleware 与 Guards 的切入点是一样的,Guards 能够获取到上下文信息,更关注此操作是否放行
Middleware 获取不到上下文信息,更关注在处理请求到达之前做一些事情

六、Exception filters

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

在这里插入图片描述

一般可以实现根据自己的业务,实现特定的异常类

七、Pipes (管道)

Pipes 是由 @Injectable() 装饰的实体类,并且需要实现 PipeTransform 接口
在这里插入图片描述

Pipes 主要有以下两个使用场景

转化输入的数据到需要的数据结构

验证输入数据,如果有效,只需传递它;否则抛出相应的异常,一般用于 Controller 层

一些常用的内置 Pipes

PiPe详情
ValidationPipe验证传入数据
ParseIntPipe输入转 Int 类型
ParseFloatPipe输入转 Float 类型
ParseBoolPipe输入转 Bool 类型
ParseArrayPipe输入转 Array 类型
ParseUUIDPipe输入转 UUID 类型
ParseEnumPipe输入转 Enum 类型
DefaultValuePipe制定默认值

八、Guards (守卫)

Guards 是由 @Injectable() 装饰的实体类,并且需要实现 CanActivate 接口

在这里插入图片描述

Guards 有一个单一的责任。它们根据运行时存在的某些条件(如权限、角色等)确定给定的请求是否将由路由处理程序处理

九、Interceptors (拦截器)

Interceptors 是由 @Injectable() 装饰的实体类,并且需要实现 NestInterceptor 接口

在这里插入图片描述

拦截器具有一组有用的功能,这些功能受到面向切面编程 (AOP) 技术的启发

在方法执行的前后,绑定额外的逻辑(支持Rxjs)

转换从函数的结果返回

转换从函数抛出的异常

扩展基础函数的行为

根据特定条件完全覆盖函数(例如,出于缓存目的)

能完全切入请求处理前后,进行额外的操作处理

十、Custom route decorators (自定义路由注解)

用于将逻辑数据绑定到请求对象。然后在每个路由处理程序中手动提取它们

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值