主题
完成一个功能模块
一个完整的模块包括 控制器、提供器 和 模块。
- 控制器负责处理传入的请求并将响应发送回客户端。
- 提供程序是 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
输入 Y 自动创建文件 
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);
}
}- @Controller('user') 控制器路由前缀
- @Get()、@Post()、@Put()、@Delete()、@Patch()、@Options()、@Head()、@All() 控制器路由方法
- @Req()、@Res()、@Next()、@Session()、@Param()、@Body()、@Query()、@Headers()、@Ip()、@HostParam() 控制器路由参数
- @Get('user/*') 控制器路由通配符
- @Redirect() 控制器路由重定向
- @HttpCode(204) 控制器响应状态码
- @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`;
}
}
