初次接触Nest,有问题欢迎指出👇👇👇:
简介
NestJS
是一个用于构建高效、可扩展的Node.js
服务器端应用程序的开发框架。简单来说是一款Node.js
的后端框架。
在底层,Nest
构建在强大的 HTTP 服务器框架上,例如 Express (默认),并且还可以通过配置从而使用 Fastify!
核心概念:提供一种体系结构,它帮助开发人员实现层的最大分离,并在应用程序中增加抽象。
特点
向开发者直接暴露底层框架的 API
完美支持ts
兼容express中间件(express是最早出现的轻量级的node server端框架,Nestjs能够利用所有express的中间件,使其生态完善)
层层处理,一定程度上可以约束代码(比如何时使用中间件、何时需要使用guards守卫等)。
依赖注入以及模块化的思想,提供了完整的mvc的链路,使得代码结构清晰,便于维护。
前期准备
安装好Nodejs
安装好MongoDB
构建
安装:
npm i -g @nestjs/cli
初始化项目:
nest new 项目名称
此步骤会让你选择使用npm 还是yarn,如下图:
启动
进入文件夹后启动:
启动后在浏览器访问
http://localhost:3000/
便可出现Hello World!,说明已搭建好项目,如下图所示:为什么通过以上2个命令访问端口就出现Hello World!呢,下面从生成的文件目录谈起:
项目目录
src下面是几个核心文件:
核心
模块Module
, 控制器Controller
, 服务与依赖注入Provider Dependency injection
。
模块Module: 用于将代码拆分为独立的和可重用的模块。
控制器Controller: 负责处理客户端传入的请求参数并向客户端返回响应数据。
服务Provider :在这里处理所有请求执行逻辑,在控制器中通过
constructor
函数以依赖注入的方式实现。constructor(private readonly catsService: CatsService) {}
控制器的目的是接收应用的特定请求。路由机制控制哪个控制器接收哪些请求。通常,每个控制器有多个路由,不同的路由可以执行不同的操作。
为了创建一个基本的控制器,我们必须使用装饰器。装饰器将类与所需的元数据关联,并使Nest
能够创建路由映射(将请求绑定到相应的控制器)。
Nestjs路由
以下例子中,使用了定义基本控制器所需的@Controller('cats')
装饰器。将可选前缀设置为cats
。使用前缀可以避免在所有路由共享通用前缀时出现冲突的情况。
用CLI创建控制器执行命令(也可以手动创建):
nest g controller cats
,src下面会多出文件夹cats
:cats.controller.ts
Get路由
在该文件加入以下代码:@Get() findAll(): string { return 'This action returns all cats'; }
findAll()
方法之前的@Get()
HTTP请求方法装饰器告诉Nest
为HTTP请求的特定端点创建处理程序。访问路由:
http://localhost:3000/cats
创建了一个端点来获取数据—— G E T 路 由 \color{purple}{GET路由} GET路由 。 那创建新记录的端点呢?👇Post路由
继续在
cats.controller.ts
文件中加入以下代码:@Post() create(): string { return 'This action adds a new cat'; }
Put路由
在
cats.controller.ts
文件中加入以下代码:@Put(':id') update(@Param('id') id: string) { return `This action updates a #${id} cat`; }
Delete路由
在
cats.controller.ts
文件中加入以下代码:@Delete(':id') remove(@Param('id') id: string) { return `This action removes a #${id} cat`; }
Nestjs 状态码
在上面路由的例子中细心的人应该已经发现除了Post
之外其他的状态码都是 200 \color{red}{200} 200,Post的确是 201 \color{red}{201} 201。
我们可以通过在处理程序层添加@HttpCode(...)
装饰器来修改此行为:
@Post() @HttpCode(200) create() { return 'This action adds a new cat'; }