likes
comments
collection
share

全面梳理Nest.js项目模板代码:从根模块到服务层的完整指南本篇博客详细梳理了一个典型的Nest.js项目模板代码,从

作者站长头像
站长
· 阅读数 22

引言

在使用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注册了UsersControllerUsersService,提供了用户相关的功能。

用户控制器: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
评论
请登录