Node.js又一框架:Nest.js(六)

1,661 阅读2分钟

完整示例

利用几个可用的装饰器来创建一个暴露了几个访问和操作内部数据方法的基本控制器。

/**
* @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 运行命令效果截图

image.png

注意:须在系统自带 Commond 面板执行 nest g resource

git bash 运行 nest g resource 报错。同时也无法通过方向键选择包安装器(npmyarn),控制器类型(HTTP 控制器,微服务控制器,GraphQL 处理器(代码优先或者原理优先),以及 WebSocket 网关)等选项。

图二:nest g resource 运行生成模板文件截图

image.png

在项目根目录下执行该命令来生成资源,不仅仅生成所有 Nest 构建文件(模块、服务、控制器类),也生成实体类,DTO 类和测试(.spec)文件。

Nest CLI 支持生成所有 CRUD 终端占位符(REST API 路径,GraphQL 查询和编译,微服务和 WebSocket 网关的消息订阅器)。

生成的资源类未与任何特定 ORM(或者数据源)绑定,以在任何项目下通用。