本文主要内容是 NestJS 快速上手指南,不包含详细的 API 罗列和能力介绍,如有需要可以随时查阅官方文档:docs.nestjs.com。
简介
NestJS 是一个基于 Node.js 的后端框架
为什么使用 NestJS
它提供了一个完善的、开箱即用的后端架构。支持 TypeScript、OOP(Object Oriented Programming)、FP(Functional Programming)、FRP(Functional Reactive Programming)。支持依赖注入,可以创建高度可测试、易扩展、松散耦合、易维护的后端程序。
核心概念
直接处理请求和返回响应的部分,使用 class 和 decorators 构建。Class 让我们使用对象编程,装饰器可以让 Nest 构建路由映射。
1 | js复制代码// cat.controller.ts |
负责数据存储和获取的部分,同样使用 class 和 decorators 构建。这里的 @Injectable()
赋予了 CatService 可以被 Nest IoC 容器管理的特性。
1 | ts复制代码// cat.service.ts |
provider 是可以作为依赖被注入的东西,Nest 中几乎所有东西都可以被当作 provider,比如上面代码中的 CatsService,就是一个 provider。
Provider 在 Controller 中消费。
1 | ts复制代码// cat.controller.ts |
Provider 还需要在 Module 中注册,之后才可以被 Nest 注入到相应的地方。
1 | ts复制代码// cat.module.ts |
使用 @Module 注解的类,被 Nest 用来组织应用程序的结构, 解析模块、provider 关系和依赖。
根据 SOLID 原则,我们将相关部分放到一起,一个模块的文件结构大概会是这样:
1 | md复制代码src |
app.module.ts 是应用程序的根模块,必须存在,负责组织内部其它模块,内容如下:
1 | ts复制代码// app.module.ts |
略
Nest 自带的异常捕获器,负责处理代码中未处理的异常。
比如未处理的全局异常返回、参数校验失败返回,都会经过内置的过滤器返回固定的格式。我们也可以使用过滤器自定义处理全局异常返回的格式,同时记录错误日志。
主要做一些数据格式转换和校验的工作。
转换和校验其实可以在路由处理器方法中完成,但是为了单一责任原则,Nest 专门设计了 pipe 来处理此类工作。
1 | ts复制代码// 格式转换 |
参数校验
Nest 使用内置的 ValidationPipe
和第三方包 class-validator
做参数校验
1 | ts复制代码// 全局开启校验 |
基于一些条件判断一个请求是否可以被路由处理器处理,主要用于权限校验。
可以在路由函数执行之前或之后做一些事情。比如,全局成功返回的固定格式,访问日志等。
以上便是 NestJS 的一些核心概念,看完后对 NestJS 应该有了一个整体的了解,再结合对应部分的文档,便可以熟练掌握 NestJS 的使用。
本文转载自: 掘金