TypeGraphQL是基于GraphQL重写的TypeScript版本,GraphQL的全称是:Graph Query Langue 图形化查询语言,是一个可由调用端定义API返回数据结构语言。...@nestjs/graphql,这里我们直接使用@nestjs/graphql。...InputType:声明一个输入类型的Schema,当进行Mutation变异查询(提交数据)的时候,提交的数据格式必须要按照此结构提交,使用方式:InputType。.../dto目录下创建create-pokemon.dto.ts,内容为以下: import { Field, ObjectType} from 'type-graphql' @ObjectType()...结语 其实总体来说,整个NestJs应用的开发体验还是蛮好的,相关的生态也发展的比较成熟,本项目仅是对相关技术的一个整体尝试,实际在开发过程中遇到的还有很多别的问题,比如GraphQL的N+1查询问题,
比如 GET 请求 /students 查询所有学生,/students/1 查询 id 为 1 的学生 发送 POST、PUT、DETETE 请求分别代表增删改。...其实也可以用 GraphQL 的方式来写接口: 查询: 新增: 增删改查都在一个接口里搞定,并且想要什么数据由前端自己取。...接下来实现 graphql 版本: 安装用到的包: npm i @nestjs/graphql @nestjs/apollo @apollo/server graphql 然后在 AppModule...浏览器访问 http://localhost:3000/graphql 就是 playground,可以在这里查询: 左边输入查询语法,右边是执行后返回的结果。...: 修改: 单个查询: 删除: 查询: 基于 GraphQL 的增删改查都成功了!
GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。...下面以 apollographql 为例,并查询 People 对象。...query 查询所有 People 并且只获取 name、gender、height 字段 查询 personID 为 1 的 Person 并且只获取 name,gender,height 字段...尝试输入 GraphQL 的 query 查询(可以按 Ctrl + i 触发代码建议(Trigger Suggest),与 vscode 同理) 此时点击执行,可以得到右侧结果,即app.resolver.ts...例子 查询所有 todo 查询 id 为 2 的 todo 查询 id 为 2 的 todo 并只返回 value 属性 新增 todo 更新 todo 删除 todo 由于
前面我们介绍了GraphQL的概念和基础知识,这篇文章记录下使用Nestjs+GraphQL搭建Node服务。...安装 npm i --save @nestjs/graphql graphql-tools graphql apollo-server-express 注册 // app.module.ts import...{ Module } from '@nestjs/common'; import { GraphQLModule } from '@nestjs/graphql'; import { ConfigModule...: string; // 要声明数组的项(而不是数组本身)是可为空的,请将nullable属性设置'items' // 如果数组及其项都是可空的,则设置nullable为'itemsAndList...} 执行查询 这时我们的服务已经运行起来,可以执行查询了。 ?
true, name: 'update_time' }) updateTime: number; } 上面的内容定义的是表的字段及字段类型等 2 新建controller 这里定义了四个路由,全部为post...class UserController { constructor(private readonly userService: UserService) {} /** * 用户管理-分页查询...Dto文件夹有四个文件,分别为addUser.dto.ts、deleteUser.dto.ts、queryUser.dto.ts和updateUser.dto.ts,这四个是查询及验证使用 1 addUser.dto.ts...}) readonly id: number; } 3 queryUser.dto.ts import { ApiProperty } from '@nestjs/swagger'; import...}) readonly pageSize: number; } 4 updateUser.dto.ts import { ApiProperty } from '@nestjs/swagger
而且也很容易集成 GraphQL、WebSocket 等功能,适合用来做大规模企业级开发。.../dto/create-xxx.dto'; import { UpdateXxxDto } from '....@Param 是取路径中的参数,@Query 是取查询字符串的参数。 @Body 是把请求参数设置到对象的属性上,被用来传递数据的对象叫做 dto(data transfer object)。.../dto/create-xxx.dto'; import { UpdateXxxDto } from '....数据库一开始有两条记录: 通过查询接口能正确的查出来: 然后测试下修改接口: 数据库中确实被修改了: 经过测试,对笔记单表的 CRUD 的功能正常。
(即图中的 Schemas) 映射 DTO 点开 RegisterInfoDTO,发现里面是空的,接下来,我们配置一下参数信息,在 user.dto.ts 中引入 ApiProperty,然后添加到之前的.../user.dto'; import { ApiTags } from '@nestjs/swagger'; @ApiTags('user') // 添加 接口标签 装饰器 @Controller('.../user.dto'; import { ApiTags, ApiBearerAuth } from '@nestjs/swagger'; @ApiBearerAuth() // Swagger 的...示例参数 前面登录的时候,需要手动输入用户名、密码,那么有没有可能,事先写好,这样前端来看文档的时候,直接用默认账号登录就行了呢?.../user.dto'; import { ApiTags, ApiBearerAuth, ApiBody } from '@nestjs/swagger'; @ApiBearerAuth() @ApiTags
前两天发现 NestJS 更新到了 7.0.3(之前是 6.0.0),为了让教程更贴合实际,故果断升级。...根据定义,我们需要在代码中约定一下 DTO,还是以注册接口为例,先创建 user.dto.ts 简单定义一下: // src/logical/user export class RegisterInfoDTO...管道有两个类型: 转换:管道将输入数据转换为所需的数据输出; 验证:对输入数据进行验证,如果验证成功继续传递,验证失败则抛出异常; ValidationPipe 是 Nest.js 自带的三个开箱即用的管道之一...上面简单编写了一些常用的验证手段,class-validator 里面有非常多的验证方法,有兴趣的读者可以访问官方文档去学习:GitHub: class-validator[2] 接下来我们测试一下,先测试为空的情况...上图可以看到 accountName 的 @IsNotEmpty() 已经生效了 注意:class-validator 还提供了一个方法叫 @IsEmpty(),这是表示参数必须为空,不要搞混了。
前两天发现 NestJS 更新到了 7.0.3(之前是 6.0.0),为了让教程更贴合实际,故果断升级。...根据定义,我们需要在代码中约定一下 DTO,还是以注册接口为例,先创建 user.dto.ts 简单定义一下: // src/logical/user exportclass RegisterInfoDTO...管道有两个类型: 转换:管道将输入数据转换为所需的数据输出; 验证:对输入数据进行验证,如果验证成功继续传递,验证失败则抛出异常; ValidationPipe 是 Nest.js 自带的三个开箱即用的管道之一...上面简单编写了一些常用的验证手段,class-validator 里面有非常多的验证方法,有兴趣的读者可以访问官方文档去学习:GitHub: class-validator[2] 接下来我们测试一下,先测试为空的情况...上图可以看到 accountName 的 @IsNotEmpty() 已经生效了 注意:class-validator 还提供了一个方法叫 @IsEmpty(),这是表示参数必须为空,不要搞混了。
React 18 + TypeScript + NestJS + GraphQL:全栈开发在线教育平台的探索随着在线教育行业的蓬勃发展,构建一个高效、稳定、用户友好的在线教育平台变得至关重要。...React 18、TypeScript、NestJS 和 GraphQL 作为现代全栈开发中的佼佼者,为开发者提供了强大的工具集来构建这样的平台。...四、GraphQL:数据查询的革新者GraphQL 是一种强大的数据查询和操作语言,它允许客户端精确地指定所需的数据,从而避免了传统 REST API 中的过度获取和冗余数据问题。...在在线教育平台中,GraphQL 可以帮助开发者更加灵活地查询和更新用户数据、课程数据等,提高数据处理的效率和准确性。...综上所述,React 18、TypeScript、NestJS 和 GraphQL 的结合为全栈开发在线教育平台提供了强大的技术支撑。
举个例子,我们的 controller 接收到了一个用户的查询请求,我们不能直接在 controller 中去查询数据库并返回,而是要将查询请求交给 provider 来处理,这里我们创建了一个 UserService.../user.dto'; import { User } from '..../user.dto'; import { User } from './user.interface'; import { UserService } from '....它包含一个泛型参数 T,默认值为 unknown,其中包含 code(响应码)、data(响应数据,可选)和 message(响应消息)三个属性。...// 输入框2的输入事件(年龄) input2Change(e) { this.setData({ inputValue2: e.detail.value, });
React18+TS+NestJS+GraphQL 全栈开发在线教育平台:技术引领教育新纪元随着数字化时代的飞速发展,教育行业也迎来了前所未有的变革。...为了满足用户对于高效、便捷、个性化的学习需求,我们采用React18、TypeScript(TS)、NestJS和GraphQL这一前沿技术栈,全栈开发了一款在线教育平台。...GraphQL作为数据查询的革新者,其精确的数据请求和响应能力,使得在线教育平台能够根据用户需求精确地获取所需数据,极大地提高了数据处理的效率和准确性。...通过GraphQL,我们实现了前后端数据的无缝对接,为用户提供了更加流畅、高效的学习体验。...在React18、TypeScript、NestJS和GraphQL的共同作用下,我们成功打造了一款功能丰富、性能卓越、稳定可靠的在线教育平台。
全局验证通道 对比前面的教程,可以看出这个问文件,只添加两行代码,一行是导入ValidationPipe ,另一行是开启一个全局验证通道 import { NestFactory } from '@nestjs.../core'; import { ValidationPipe } from '@nestjs/common'; import { AppModule } from '....//开启一个全局验证管道 await app.listen(3000); } bootstrap(); 3 使用class-validator 为了项目统一管理,我们在之前的User模块下,新建Dto...文件夹,这里面放置我们的文件,新建一个用户查询的Dto,文件内容如下: import { IsNotEmpty, Length } from 'class-validator'; export class...QueryUserDto { @IsNotEmpty({ message: '用户名不为空' }) @Length(10, 20, { message: 'name的长度不能小于10不能大于20
│ Generate a provider declaration │ │ resolver │ r │ Generate a GraphQL...new ValidationPipe()); await app.listen(configService.get('SERVE_LISTENER_PORT')); } bootstrap() DTO...enum: ['Boss', 'Admin', 'User'] }) role: UserRole; @IsOptional() @IsString({ message: '用户名必须为字符串...maximum: 130, required: false, }) readonly age: number; @IsString({ message: '爱好必须为字符串.../app.dto'; import { AppService } from '.
以下是 Nest.js 中管道的一些主要用途:数据转换:管道如 ParseIntPipe、ParseFloatPipe、ParseArrayPipe 等可以将原始输入数据转换为应用内部所需的类型,如将字符串转换为整数或浮点数...例如,使用 ValidationPipe 结合 class-validator,可以自动验证请求体或查询参数是否满足特定的 DTO(数据传输对象)定义,从而预防因数据格式错误引起的运行时异常错误处理:如果数据不符合管道的规则...type: Number, description: '排序', default: 1, }) @IsNumber( {}, { message: '排序必须为数字...from '@nestjs/common';import { ApiOkResponse, ApiOperation, ApiTags } from '@nestjs/swagger'; // swagger.../dto/response-post.dto';import { PostManageService } from '.
/dto/params-post.dto';import { ResponsePostDto } from '..../dto/response-post.dto';import { PostManageService } from '....PostManageController {constructor(private readonly postManageService: PostManageService) { }/** * @description: 查询岗位列表...,用于组织 Swagger UI 文档@ApiOperation为控制器方法添加操作描述,包括摘要和详细描述@ApiParam描述路径参数、请求参数或响应参数,包括名称、类型、描述等@ApiBody指定请求体的...为 DTO 类型的属性添加元数据,如描述、默认值等@ApiQuery描述查询参数,包括名称、类型、描述等@ApiHeader描述请求头信息,包括名称、类型、描述等@ApiExcludeEndpoint标记一个控制器方法不在
/dto/create-post.dto'; import { UpdatePostDto } from '..../dto/update-post.dto'; import { PostsEntity } from '....(key) => { if (params[key]) { queryParams[key] = Like(`%${params[key]}%`); // 所有字段支持模糊查询...existRecord) { throw new HttpException(`id为${id}的文章不存在`, HttpStatus.BAD_REQUEST); } //...文件夹下的index.ejs getUser(): any { return {message: "hello word"} //只有返回参数在模板才能获取,如果不传递参数,必须返回一个空对象
我们可以用几行 shell 代码编写一个完整的设置来让我们的服务器实例运行并准备一个空的数据库准备连接。...让我们使用预构建的 NestJS-to-TypeORM 模块为我们的项目添加 TypeORM 支持。...性能,更容易优化查询。 版本控制。 可测试性。...... 等等 因此,我们将添加一个 ItemDTO 响应类,该类将由数据库中的项目实体填充。...这就是一个简单的服务和响应 DTO 的样子: 注意:你必须为此安装 @nestjs/swagger、class-validator 和 class-transformer。...// item.dto.ts import { ApiModelProperty } from'@nestjs/swagger'; import { IsString, IsUUID, } from'class-validator
本文为英文译文,感兴趣的同学可以点击文章末尾的“阅读原文” 查看英文原版。...我们可以用几行 shell 代码编写一个完整的设置来让我们的服务器实例运行并准备一个空的数据库准备连接。...让我们使用预构建的 NestJS-to-TypeORM 模块为我们的项目添加 TypeORM 支持。...性能,更容易优化查询。 版本控制。 可测试性。...... 等等 因此,我们将添加一个 ItemDTO 响应类,该类将由数据库中的项目实体填充。...这就是一个简单的服务和响应 DTO 的样子: 注意:你必须为此安装 @nestjs/swagger、class-validator 和 class-transformer。
领取专属 10元无门槛券
手把手带您无忧上云