Skip to content

完成一个功能模块

一个完整的模块包括 控制器提供器模块

  • 控制器负责处理传入的请求并将响应发送回客户端。
  • 提供程序是 Nest 中的核心概念,关键思想是它可以作为依赖注入,从而允许对象彼此形成各种关系。
  • 模块是一个用 @Module() 装饰器注释的类。此装饰器提供 Nest 用于有效组织和管理应用结构的元数据

快速生成一个功能模块

shell
nest g resource
nest g resource [文件夹路径] #指定文件夹
nest g resource [文件夹路径] --no-spec #忽略测试文件

创建一个user模块

以user模块为例

shell
nest g resource modules/user

选用API模式,一般选择REST API 图片1 输入 Y 自动创建文件 图片1

TIP

此时生成的uesr模块会在app.module.ts中自动引入。

可以创建 modules/index.module.ts 文件,在此文件中引入user模块,然后在app.module.ts中引入modules/index.module.ts

此后,再生成modules下的功能模块时,会在modules/index.module.ts中自动引入

modules/index.module.ts
ts
import { Module } from '@nestjs/common';
import { UserModule } from './user/user.module';

@Module({
  imports: [UserModule],
  controllers: [],
  providers: [],
})
export class Modules {}

文件说明

  • user.service.ts 提供器,处理业务逻辑
  • user.module.ts 模块,自动导入导出提供器和控制器
  • user.controller.ts 控制器,处理路由请求
  • dto/create-user.dto.ts dto文件,创建用户,类型文件,最好用class,减少ts类型
  • dto/update-user.dto.ts dto文件,更新用户,类型文件,最好用class,减少ts类型
  • entities/user.entity.ts 数据库映射类型

user.controller.ts

接收请求,处理参数,返回响应,路由聚合

user.controller.ts
ts
import {
  Controller,
  Get,
  Post,
  Body,
  Patch,
  Param,
  Delete,
} from '@nestjs/common';
import { UserService } from './user.service';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';

@Controller('user')
export class UserController {
  constructor(private readonly userService: UserService) {}

  @Post()
  create(@Body() createUserDto: CreateUserDto) {
    return this.userService.create(createUserDto);
  }

  @Get()
  findAll() {
    return this.userService.findAll();
  }

  @Get(':id')
  findOne(@Param('id') id: string) {
    return this.userService.findOne(+id);
  }

  @Patch(':id')
  update(@Param('id') id: string, @Body() updateUserDto: UpdateUserDto) {
    return this.userService.update(+id, updateUserDto);
  }

  @Delete(':id')
  remove(@Param('id') id: string) {
    return this.userService.remove(+id);
  }
}
  1. @Controller('user') 控制器路由前缀
  2. @Get()、@Post()、@Put()、@Delete()、@Patch()、@Options()、@Head()、@All() 控制器路由方法
  3. @Req()、@Res()、@Next()、@Session()、@Param()、@Body()、@Query()、@Headers()、@Ip()、@HostParam() 控制器路由参数
  4. @Get('user/*') 控制器路由通配符
  5. @Redirect() 控制器路由重定向
  6. @HttpCode(204) 控制器响应状态码
  7. @Controller({ host: 'admin.example.com' }) 子域路由

user.service.ts

封装业务逻辑,数据交互,复用与抽象,隔离业务与接口,被 user.controller.ts 调用

user.service.ts
ts
import { Injectable } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { UpdateUserDto } from './dto/update-user.dto';

@Injectable()
export class UserService {
  create(createUserDto: CreateUserDto) {
    return 'This action adds a new user';
  }

  findAll() {
    return `This action returns all user`;
  }

  findOne(id: number) {
    return `This action returns a #${id} user`;
  }

  update(id: number, updateUserDto: UpdateUserDto) {
    return `This action updates a #${id} user`;
  }

  remove(id: number) {
    return `This action removes a #${id} user`;
  }
}

测试模块

访问http://localhost:3000/user