全面梳理Nest.js项目模板代码:从根模块到服务层的完整指南本篇博客详细梳理了一个典型的Nest.js项目模板代码,从
引言
在使用Nest.js进行项目开发时,理解和组织好项目的结构至关重要。本篇博客将详细梳理一个典型的Nest.js项目,从入口文件到服务层代码,帮助你全面了解每个部分的作用和实现方式。
项目入口:main.ts
main.ts
是Nest.js应用的入口文件,它负责引导整个应用程序。
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
async function bootstrap() {
// 创建 Nest 应用 (引入根模块)
const app = await NestFactory.create(AppModule);
// 创建Swagger接口文档及接口测试应用
const config = new DocumentBuilder()
.setTitle('接口文档')
.setDescription('描述')
.setVersion('1.0')
.build();
const document = SwaggerModule.createDocument(app, config);
SwaggerModule.setup('docs', app, document);
await app.listen(3000, () => {
console.log('127.0.0.1:3000');
});
}
bootstrap();
bootstrap
函数是应用程序的主入口,它创建了Nest应用实例,并设置了Swagger文档。
根模块:app.module.ts
根模块定义了应用的主要结构和依赖关系。
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { UserController } from './user.controller';
import { AppService } from './app.service';
import { VideoModule } from './video/video.module';
import { UsersModule } from './users/users.module';
// Nest 中的模块装饰器
@Module({
// 引入子模块
imports: [VideoModule, UsersModule],
controllers: [UserController, AppController],
providers: [AppService],
})
export class AppModule {}
AppModule
是应用的根模块,它引入了其他子模块,并注册了控制器和服务。
用户模块:users.module.ts
用户模块定义了与用户相关的控制器和服务。
import { Module } from '@nestjs/common';
import { UsersService } from './users.service';
import { UsersController } from './users.controller';
@Module({
controllers: [UsersController],
providers: [UsersService],
})
export class UsersModule {}
UsersModule
注册了UsersController
和UsersService
,提供了用户相关的功能。
用户控制器:users.controller.ts
用户控制器处理用户相关的HTTP请求。
import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
import { UsersService } from './users.service';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
import { ApiOperation, ApiTags } from '@nestjs/swagger';
// Swagger标签分类
@ApiTags('用户')
// 使用装饰器修饰类(路由)
@Controller('users')
export class UsersController {
// 依赖注入的方式,引入服务
constructor(private readonly usersService: UsersService) {}
// 使用装饰器装饰方法,表示使用POST请求(路由)
@Post()
// Swagger接口描述
@ApiOperation({ summary: '添加用户' })
// @Body是获取客户端传来的body中的数据,给createUserDto
create(@Body() createUserDto: CreateUserDto) {
return this.usersService.create(createUserDto);
}
}
UsersController
定义了处理用户请求的路由和方法,通过依赖注入引入了UsersService
。
用户DTO:create-user.dto.ts
用户DTO用于定义请求数据的结构和验证规则。
import { ApiProperty } from '@nestjs/swagger';
export class CreateUserDto {
// 使用Swagger和TS配合进行参数约束说明
@ApiProperty({
description: '邮箱',
})
readonly email: string;
@ApiProperty({
description: '密码',
default: '123456',
})
password: string;
}
CreateUserDto
使用@ApiProperty
装饰器定义了请求数据的属性和描述,便于Swagger生成文档。
用户服务:users.service.ts
用户服务包含了业务逻辑和数据处理方法。
import { Injectable } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';
@Injectable()
export class UsersService {
create(createUserDto: CreateUserDto) {
return 'This action adds a new user';
}
}
UsersService
实现了用户相关的业务逻辑方法,如创建用户。
总结
通过对Nest.js项目模板代码的梳理,你可以清晰地了解每个文件和模块的作用,从入口文件到服务层的实现。理解这些基础结构,有助于你在实际项目中更好地组织代码和开发应用。
转载自:https://juejin.cn/post/7382044535813586981