1.介绍:
Nest (NestJS) 是一个用于构建高效、可扩展的 Node.js 服务器端应用的框架。它使用渐进式 JavaScript,构建并完全支持 TypeScript(但仍然允许开发者使用纯 JavaScript 进行编码)并结合了 OOP(面向对象编程)、FP(函数式编程)和 FRP(函数式反应式编程)的元素。对于入门我感觉只要知道他是nodejs的框架就行
2.下载依赖,创建项目
安装全局依赖:
pnpm add -g @nestjs/cli
创建项目
nest new test //创建一个名为test的项目
修改执行指令
进入package.json,找到下面这行代码 (其执行指令为 pnpm start:dev)
"start:dev": "nest start --watch",
将其改为(其执行指令为 pnpm dev)
"dev": "nest start --watch",
根据你的习惯而定
3.在项目中创建服务,控制器,模块等
在终端输入 nest,他会展示以下内容,告诉你你可以创建的东西
注意红色框框里的,他意味每当创建一个东西时都需加上 g
如创建一个服务 nest g s hd -h (意味着该服务的名字为hd,加上 -h 以为查看创建的选项)
--no-spec 为创建的提供器,控制器等不携带测试案例,具体自己测试吧
这里提一个比较好用的指令
nest g res xxx --no-spec
执行这个命令,能帮你创建一整个模块,意味着提供器,控制器,模块都帮你创建出来,甚至dto都帮你创建出来
4.使用
控制器负责处理传入请求并向客户端返回响应。
创建一个控制器
nest g co user --no-spec
import { Controller, Get } from '@nestjs/common';
@Controller('user')
export class CatsController {
@Get()
findAll(): string {
return 'This action returns all user';
}
}
@Controller() 为装饰器,他是必须的,我们通过他将user分为一组,仅对user进行增删改查,这样我们就不必为文件中的每个路由重复该部分路径。
@Get() 为HTTP请求方法装饰器,用于告诉 Nest 为 HTTP 请求的特定端点创建处理程序,端点对应于 HTTP 请求方法(在本例中为 GET)和路由路径,处理程序的路由路径通过连接为控制器声明的(可选)前缀和方法装饰器中指定的任何路径来确定,Nest 会将Get/user请求映射到这个处理程序 。 说白了,你请求这个数据的路径需要添加后缀 /user,
例如 :一般nest的端口号为 3000 ,如果@Controller()里面啥也没写,你打开服务后只需在浏览器中输入 localhost:3000就能请求到,但加了user 就的输入 localhost:3000/user
请求对象
我们可以通过将装饰器添加到处理程序的签名来指示 Nest 注入它来访问请求对象。
下面是提供的装饰器列表和它们代表的普通平台特定对象
就是通过这些装饰器来获取请求对象
nest使用的是ts需要对类型加以限制,所以在使用时最好下载软件包 @types/express
提供器
1.介绍
许多基本的 Nest 类可以被视为提供器 - 服务、存储库、工厂、助手等等,提供器的主要思想是它可以作为依赖注入。我的理解是,服务器用来写函数供控制器使用,以及其他提供器使用
2.创建提供者
nest g s user --no-spec
//user.service.ts
import { Injectable } from '@nestjs/common';
@Injectable()
export class UserService {
sayHellow(){
return "你好"
}
}
//user.controller.ts
import { Controller, Get } from '@nestjs/common';
import { UserService } from './user.service';
@Controller('user')
export class UserController {
constructor(private userService:UserService){} //依赖注入
@Get("user")
findAll(){
return this.userService.sayHellow()
}
}
3.模块
后端提供的服务都是由一个一个模块组合起来的,
创建模块
nest g mo user --no-spec
对于单个模块,其里面的提供器需注入到providers 控制器需注入到controllers(需要特别注意,不然debug得找很久)
//user.module.ts
import { Module } from '@nestjs/common';
import { UserController } from './user.controller';
import { UserService } from './user.service';
@Module({
controllers: [UserController],
providers: [UserService],
})
export class UserModule {}
如果你创建了一个提供器,没有创建对应模块,需要在根模块app.module.ts中注册(一般nest会帮你注册)