作者:嘲笑讽刺伤 | 来源:互联网 | 2024-11-02 15:46
在本文中,我们将深入探讨Node.js的新框架Nest.js,并通过一个完整的示例来展示其强大功能。我们将使用多个装饰器创建一个基本控制器,该控制器提供了多种方法来访问和操作内部数据,涵盖了常见的CRUD操作。此外,我们还将详细介绍Nest.js的核心概念和最佳实践,帮助读者更好地理解和应用这一现代框架。
完整示例
利用几个可用的装饰器来创建一个暴露了几个访问和操作内部数据方法的基本控制器。
/**
* @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
),控制器类型(HTTP
控制器,微服务控制器,GraphQL
处理器(代码优先或者原理优先),以及 WebSocket
网关)等选项。
图二:nest g resource
运行生成模板文件截图
在项目根目录下执行该命令来生成资源,不仅仅生成所有 Nest
构建文件(模块、服务、控制器类),也生成实体类,DTO
类和测试(.spec
)文件。
Nest CLI
支持生成所有 CRUD
终端占位符(REST API
路径,GraphQL
查询和编译,微服务和 WebSocket
网关的消息订阅器)。
生成的资源类未与任何特定 ORM
(或者数据源)绑定,以在任何项目下通用。