主题
搭建一个NestJS项目
介绍
详细文档查看:NestJS中文官网
前提
Node.js(version) >= 20
创建项目
- 通过脚手架安装
shell
pnpm i -g @nestjs/cli
nest new project-name- 通过git获取项目并启动
shell
git clone https://github.com/nestjs/typescript-starter.git project
cd project
pnpm install
pnpm run start:dev- 在浏览器中访问 http://localhost:3000/
文件介绍
入口文件
main.ts:入口文件,配置并创建服务。
提供器
.service.ts:提供器,关键思想为注入。
TIP
shell
# 快速搭建一个提供器
nest g service cats在控制器中匹配路由,匹配到后调用提供器提供的方法进行数据处理和返回。
ts
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!'; // 返回的数据
}
}控制器
.controller.ts:控制器,也叫装饰器,包含多个路由。在这里创建路由,每个路由可以不同的操作。
TIP
shell
# 根据内置 validation 的 CRUD 控制器,快速生成一个控制器
nest g resource [name]ts
@Controller() //匹配路由: localhost:3000/
export class AppController { // 导出控制器
constructor(private readonly appService: AppService) {} //依赖注入,简写类的声明和初始化
@Get() // 路由方式和名称,可以自定义路径,如: @Get('animals/cats')
getHello(): string { // 匹配到路由就会调用该方法
return this.appService.getHello(); // 调用提供器提供的方法
}
}模块
模块是一个用 @Module() 装饰器注释的类,每个 Nest 应用至少有一个模块,即根模块,它是 Nest 构建应用图的起点。
TIP
shell
# 整合该模块所有内用
nest g module cats模块就是控制该部分内容的导入导出,资源整合
ts
@Module({
imports: [], // 导出此模块所需的提供程序的导入模块列表
exports: [], // 这个模块提供的 providers 的子集应该在导入这个模块的其他模块中可用。你可以使用提供器本身或仅使用其令牌(provide 值)
controllers: [AppController], // 此模块中定义的必须实例化的控制器集
providers: [AppService], // 将由 Nest 注入器实例化并且至少可以在该模块中共享的提供程序
})
export class AppModule {}测试文件
.spec:控制器的单元测试
运行后可检查接口是否正常

