Skip to content

搭建一个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

文件介绍

入口文件

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:控制器的单元测试

运行后可检查接口是否正常