完整示例
利用几个可用的装饰器来创建一个暴露了几个访问和操作内部数据方法的基本控制器。
/**
* @description: 包含常规 CRUD 的基本控制器示例
* @update: 2021-09-10 13:59:16
* @author: Ada.H
*/
// cats.controller.ts
import { Controller, Get, Query, Post, Body, Put, Param, Delete } from '@nestjs/common';
import { CreateCatDto, UpdateCatDto, ListAllEntities } from './dto';
@Controller('cats')
export class CatsController {
@Post()
create(@Body() createCatDto: CreateCatDto) {
return '新增一只猫咪';
}
@Get()
findAll(@Query() query: ListAllEntities) {
return `查询 ${query.limit} 只猫咪`;
}
@Get(':id')
findOne(@Param('id') id: string) {
return `查询id为 ${id} 的猫咪信息`;
}
@Put(':id')
update(@Param('id') id: string, @Body() updateCatDto: UpdateCatDto) {
return `更新id为 ${id} 的猫咪信息`;
}
@Delete(':id')
remove(@Param('id') id: string) {
return `杀掉id为 ${id} 的猫咪`;
}
}
复制代码
最后一步
控制器总是属于模块。控制器已就绪,接下来需要在 @Module()
装饰器中包含控制器数组。
遵循官方建议:将每个模块保存在自己的专用目录中。代码如下:
// cats.module.ts
import { Module } from '@nestjs/common';
import { CatsService } from './cats.service';
import { CatsController } from './cats.controller';
@Module({
controllers: [CatsController],
providers: [CatsService]
})
export class CatsModule {}
复制代码
// app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CatsModule } from './cats/cats.module';
@Module({
imports: [CatsModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
复制代码
CRUD生成器
Nest CLI
提供了一个能够自动生成所有这些模板代码的生成器,避免手动建立,使开发体验变得更加简单。
nest g resource
# 添加参数 --no-spec 不生成测试文件
nest g resource cats --no-spec
复制代码
图一:cmd
运行命令效果截图
注意:须在系统自带 Commond
面板执行 nest g resource
。
git bash
运行nest g resource
报错。同时也无法通过方向键选择包安装器(npm
或yarn
)等选项。
图二:nest g resource
运行生成模板文件截图
在项目根目录下执行该命令来生成资源,不仅仅生成所有 Nest
构建文件(模块、服务、控制器类),也生成实体类,DTO
类和测试(.spec
)文件。
Nest CLI
支持生成所有CRUD
终端占位符(REST API
路径,GraphQL
查询和编译,微服务和WebSocket
网关的消息订阅器)。
生成的资源类未与任何特定 ORM
(或者数据源)绑定,以在任何项目下通用。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END