作为Nodejs 框架来说,我比较喜欢nestjs
典型的MVC框架
下面梳理一些基本概念
控制器,模块,视图就不用说了,
providers:提供者,用来提供可注入的实例或值的东西,包括服务、工厂函数、或其他可注入的内容。其使用@Injectable()
装饰器定义一个可注入的提供者(服务),其主要作用是创建、管理或提供某些可重用的实例,它们可以在整个应用程序中注入到其他组件(比如控制器或其他服务)中。这与export不同,export
主要用于指定哪些模块内容应该被其他模块导入,provider
定义了模块中的可注入的实例或值。导出模块的提供者意味着其他模块可以注入这些提供者..总的来说,provider
是定义服务和其他可注入实例的地方,而 export
是用于将这些定义的内容暴露给其他模块。
middleware:中间件是在路由处理程序之前调用的函数。是一种可以在 HTTP 请求处理管道中插入逻辑的方式。它允许您在请求到达控制器之前或之后执行一些逻辑。
其作用可用于:
-
日志记录: 可以使用中间件记录请求的详细信息,例如请求方法、URL、响应状态等。这有助于调试和监控应用程序的行为。
-
身份验证: 中间件可以执行身份验证逻辑,例如检查请求中的令牌或验证用户的权限,以确保请求是合法的。
-
数据转换: 中间件可以用于在请求到达控制器之前或响应发送给客户端之前对数据进行转换。例如,解析请求体中的 JSON 数据。
-
异常处理: 中间件可以捕获异常并执行相应的处理逻辑。这对于全局错误处理和日志记录非常有用。
-
性能监控: 中间件可以用于监控请求的执行时间,记录性能指标,并执行其他与性能相关的操作。
exception filters:Nest 带有一个内置的异常层,负责处理应用程序中所有未处理的异常。当应用程序代码未处理异常时,该层会捕获异常,然后自动发送适当的用户友好响应。
Nest 提供了一组继承自 base 的标准异常HttpException
。这些是从@nestjs/common
包中公开的,代表许多最常见的 HTTP 异常:
BadRequestException
UnauthorizedException
NotFoundException
ForbiddenException
NotAcceptableException
RequestTimeoutException
ConflictException
GoneException
HttpVersionNotSupportedException
PayloadTooLargeException
UnsupportedMediaTypeException
UnprocessableEntityException
InternalServerErrorException
NotImplementedException
ImATeapotException
MethodNotAllowedException
BadGatewayException
ServiceUnavailableException
GatewayTimeoutException
PreconditionFailedException
pipes:管道是用@Injectable()
装饰器注释的类。管道应该实现该PipeTransform
接口。
管道有两个典型用例:
- 转换:将输入数据转换为所需的形式(例如,从字符串到整数)
- 验证:评估输入数据,如果有效,则简单地通过不变;否则,当数据不正确时抛出异常
Nest 配备了六种开箱即用的管道:
ValidationPipe
ParseIntPipe
ParseBoolPipe
ParseArrayPipe
ParseUUIDPipe
DefaultValuePipe
它们是从@nestjs/common
包中导出的。
如果么有特殊要求,基本使用时候定义dto文件就可以了,
guards:guards用@Injectable()
装饰器注释的类,警卫的职责单一。它们根据运行时存在的某些条件(如权限、角色、ACL 等)确定路由处理程序是否处理给定的请求。Guards 在每个中间件之后、任何拦截器或管道之前执行。所以它不像中间件一样不知道调用该函数后将执行哪个处理next()
程序。
interceptors:拦截器是用装饰器注释的类@Injectable()。
拦截器具有一组有用的功能,这些功能受到面向切面编程(AOP) 技术的启发。它们使以下成为可能:
- 在方法执行之前/之后绑定额外的逻辑
- 转换函数返回的结果
- 转换函数抛出的异常
- 扩展基本功能行为
- 根据特定条件完全覆盖函数(例如,出于缓存目的)
拦截器与中间件的主要区别之一就在于拦截器不只能路由执行之前,也能在执行之后添加逻辑。例如规范所有接口返回的格式;