NestJS Swagger 项目教程
1. 项目的目录结构及介绍
NestJS Swagger 项目的目录结构通常遵循 NestJS 的标准项目结构,同时包含与 Swagger 相关的特定文件和目录。以下是一个典型的 NestJS Swagger 项目的目录结构:
/nestjs-swagger-project
├── src
│ ├── app.module.ts
│ ├── main.ts
│ ├── swagger.ts
│ ├── controllers
│ │ └── example.controller.ts
│ ├── services
│ │ └── example.service.ts
│ └── dtos
│ └── example.dto.ts
├── test
├── node_modules
├── package.json
├── tsconfig.json
└── README.md
目录结构介绍
- src: 包含项目的所有源代码。
- app.module.ts: 应用程序的根模块。
- main.ts: 应用程序的入口文件。
- swagger.ts: 配置 Swagger 的文件。
- controllers: 存放控制器文件,用于定义 API 端点。
- services: 存放服务文件,用于处理业务逻辑。
- dtos: 存放数据传输对象(DTO)文件,用于定义 API 的数据结构。
- test: 包含项目的测试文件。
- node_modules: 包含项目依赖的 npm 包。
- package.json: 项目的配置文件,包含依赖和脚本。
- tsconfig.json: TypeScript 的配置文件。
- README.md: 项目的说明文档。
2. 项目的启动文件介绍
main.ts
main.ts
是 NestJS 应用程序的入口文件,负责启动应用程序。以下是一个典型的 main.ts
文件内容:
import { NestFactory } from '@nestjs/core';
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
const config = new DocumentBuilder()
.setTitle('Example API')
.setDescription('The example API description')
.setVersion('1.0')
.addTag('example')
.build();
const document = SwaggerModule.createDocument(app, config);
SwaggerModule.setup('api', app, document);
await app.listen(3000);
}
bootstrap();
文件介绍
- NestFactory.create(AppModule): 创建 NestJS 应用程序实例。
- DocumentBuilder: 配置 Swagger 文档的基本信息,如标题、描述、版本和标签。
- SwaggerModule.createDocument(app, config): 根据配置生成 Swagger 文档。
- SwaggerModule.setup('api', app, document): 将 Swagger 文档挂载到指定的路径(如
/api
)。 - app.listen(3000): 启动应用程序并监听端口 3000。
3. 项目的配置文件介绍
package.json
package.json
是 Node.js 项目的配置文件,包含项目的元数据和依赖项。以下是一个典型的 package.json
文件内容:
{
"name": "nestjs-swagger-project",
"version": "1.0.0",
"description": "A NestJS project with Swagger integration",
"scripts": {
"start": "nest start",
"build": "nest build",
"test": "jest"
},
"dependencies": {
"@nestjs/common": "^8.0.0",
"@nestjs/core": "^8.0.0",
"@nestjs/swagger": "^5.0.0",
"reflect-metadata": "^0.1.13",
"rxjs": "^7.4.0"
},
"devDependencies": {
"@nestjs/testing": "^8.0.0",
"jest": "^27.2.0",
"ts-jest": "^27.0.5",
"typescript": "^4.4.3"
}
}