首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

GraphQL 实践与服务搭建

GraphQL 对你 API 数据提供了一套易于理解完整描述,使得客户端能够准确地获得它需要数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大开发者工具。...可以参阅 BFF——服务于前端后端 但这些接口一般来说都比较重,里面有很多当前页面并不需要字段,那还有没有一种请求:客户端只需要发送一次请求就能获取所需要字段 有,也就是接下来要说 GraphQL...请求进行查询,其集中 API http://localhost:3000/graphql,所有的操作都通过这个接口来执行,这会在后面的操作在展示到。...查询 personID 为 2 Person 并且只获取 name,eyeColor、skinColor、hairColor 字段 从上面查询案例其实就可以发现,我只需要在 person 写上想要获取字段...return 'hello world'; } } 在 graphql resolver 叫解析器,与 service 类似(也需要在 @Module 通过 providers 导入)。

5.2K10

快速打开 Nestjs 世界

负责订单 CRUD 服务; controllers 注册订单控制器模块,:负责订单 CRUD 路由处理; imports 注册与订单相关联模块,:与订单关联用户查询服务; exports 导出订单提供者模块...,:用户查询需要订单提供者统计订单数量; PS:Orders 模块通过exports将订单提供者模块导出行为称为模块共享; 模块再导出 一个模块仅负责将一系列相关联模块通过imports导入,...读取请求对象 请求对象表示一个 HTTP 请求所携带数据信息,请求数据查询参数、路由参数、请求头、请求体等数据。...,HTTP 请求在经过控制器处理后应该将复杂任务交由服务层进行处理,:将复杂订单生成、查询、更新及删除等操作进行封装。...图片来自:docs.nestjs.com/interceptor… 拦截器是一个 APO 切面编程技术,应用拦截器可以获得下面所列出一系列能力: 在方法执行之前/之后绑定额外逻辑 转换函数返回结果

42310
您找到你想要的搜索结果了吗?
是的
没有找到

TS 进阶 - 实际应用 04

UI 部分、Hooks 部分以及主应用等等 和 Monorepo 非常相似,但它并不需要各个子项目拥有自己独立 package.json、独立安装依赖、独立构建等 可以使用完全独立 TSConfig...API 路由定义文件 一般不在 Controller 处理业务逻辑,Controller 通常只处理请求入参校验、请求响应包装 app.service.ts 在 Service 层去处理数据库交互...中去启动应用 在实际,可能会有多个 .module.ts 文件来实现对业务逻辑模块拆分, user.module.ts、upload.module.ts 等 在这个文件中会定义属于该模块 Controller...NodeJs ORM 目前基本都是通过 js / ts 文件进行定义,比如 Sequelize、TypeORM 等,均是通过面向对象方式进行数据库实体定义。...# NestJS 中集成 Prisma 将 Prisma 相关逻辑封装到 Service : import { Injectable, OnApplicationShutdown, OnApplicationBootstrap

79310

Nest.js 快速入门:实现对 Mysql 单表 CRUD

IOC(Inverse Of Control)是控制反转意思,就是只需要声明你依赖,不需要创建依赖对象,容器会注入给你。...reflect-metadata 模块是用于解析装饰器,因为要给某个类实例注入依赖就得能解析出它通过装饰器声明了哪些依赖,然后注入给它。所以要实现 IOC 需要依赖这个包。...URL 路径,@Get、@Post、@Patch、@Delete 也可以通过参数声明 URL 路径,最终会把两个拼起来。...比如 /xxx/:id get 方法。 @Get、@Post、@Patch、@Delete 分别对应不同请求方式。 @Param 是取路径参数,@Query 是取查询字符串参数。...数据库一开始有两条记录: 通过查询接口能正确查出来: 然后测试下修改接口: 数据库确实被修改了: 经过测试,对笔记单表 CRUD 功能正常。

4.1K30

使用NestJs、GraphQL、TypeORM搭建后端服务

在我们过去常用RestFul API,我们可能在不同业务需要调用同一个接口,但是各自所需数据有不同情况下,服务端为了同时满足两个需求则提供了更多字段,这样导致了一个两个业务请求到数据都包含了自己不需要字段...image.png 3.2、改造app.module.ts 从@nestjs/typeorm引入NestJs与TypeORM连接模块*TypeOrmModule,然后传入一个Object作为与数据库链接...此前有提到,在NestJs里面万物皆是Module,所以这里TypeORM也是作为一个子Module添加到整个服务。所以它位置应该在imports这里。...,我们将在这个示例首先两个功能,创建一个pokemon,查询全部pokemon。...结语 其实总体来说,整个NestJs应用开发体验还是蛮好,相关生态也发展比较成熟,本项目仅是对相关技术一个整体尝试,实际在开发过程遇到还有很多别的问题,比如GraphQLN+1查询问题,

6.5K10

Nest 实现 GraphQL 版 TodoList

比如 GET 请求 /students 查询所有学生,/students/1 查询 id 为 1 学生 发送 POST、PUT、DETETE 请求分别代表增删改。...,和 .env 文件: 改下 .env 配置: DATABASE_URL="mysql://root:你密码@localhost:3306/todolist" 并且修改下 schema 里 datasource...具体增删改查实现和之前一样。 浏览器访问 http://localhost:3000/graphql 就是 playground,可以在这里查询: 左边输入查询语法,右边是执行后返回结果。...: 修改: 单个查询: 删除: 查询: 基于 GraphQL 增删改查都成功了!...相比 restful 版本,graphql 只需要一个接口,然后用查询语言来查,需要什么数据取什么数据,更加灵活。 业务开发,你会选择用 GraphQL 开发接口么?

12510

使用NestJS框架实现微信自动回复消息功能

NestJS是一个基于Node.js渐进式框架,它提供了一套优雅模块化、可测试、可扩展架构,让开发者可以轻松地构建高效、可靠和易维护应用程序。...NestJS框架支持多种常用技术栈,TypeScript、GraphQL、MongoDB等,让你可以根据需求选择合适工具。...下面是具体实现过程: 实现xml 解析中间件,其功能是收到微信服务器 xml 信息 import { Injectable, NestMiddleware } from '@nestjs/common...; // 调用 parseString 函数,将 msgXml 变量 xml 格式数据解析为 JavaScript 对象,并赋值给 result 变量。...,使用了 Public 装饰器标记这个方法不需要身份验证,使用了 Post 装饰器标记这个方法处理 POST 请求,并指定路由为 'callback' @Public() @Post('callback

3.3K40

如何通过Dockerfile优化Nestjs构建镜像大小

原文开始这是一篇手把手教程,教你如何在制作nestjs镜像时,能够编写出一个优化生产依赖Dockerfile有了这个Dockerfile,无论是在本地开发环境,还是在容器环境都能很轻松完成部署P.S...CMD ["node","dist/main.js"]复制代码同样,创建.gitignore文件,我们可以把那些不需要经过docker打包文件给忽略掉touch .dockerignore复制代码把一下文件给排除忽略掉...Dockerfile.dockerignorenode_modulesnpm-debug.logdist复制代码在本地测试下如果你在本地安装了docker,可以在本地进行打包测试,让我们来瞧瞧是否预期中那样打包镜像在命令行执行以下命令...production复制代码顺便提一句,如果你不知道如何在Nestjs里面通过配置文件进行环境变量设置的话,可以看下这篇入门文章www.tomray.dev/nestjs-conf…使用npm ci...你生产环境构建说明复制代码上面是多阶段构建3个阶段:development这是用于本地环境构建镜像时阶段build 这是用于构建生产镜像阶段production 复制构建完毕后文件并且启动服务如果你不需要在本地环境使用

2.5K40

Nest.js 实战 (二):如何使用 Prisma 和连接 PostgreSQL 数据库

它包含了以下部分:Prisma Client: 自动生成、类型安全查询构建器,用于 Node.js 和 TypeScriptPrisma Migrate: 数据迁移系统Prisma Studio: 查询和编辑数据库数据图形化界面...Prisma 客户端可以被用在 任何 Node.js(支持版本)或 TypeScript 后端应用(包括 Serverless 应用和微服务)。...{ provider = "prisma-client-js" } datasource db { provider = "postgresql" // 这里使用 postgreSQL url...= env("DATABASE_URL") } 2、 .env 文件配置数据库连接: DATABASE_URL="postgresql://postgres:123456@localhost...$disconnect(); // 在应用程序关闭时断开与数据库连 } } 2、 在 src/modules/prisma 目录创建 prisma.module.ts 文件: import

17710

10分钟上手nest.js+mongoDB

,Nest 官方为我们提供了一个 Mongoose 封装,我们需要安装 mongoose 和 @nestjs/mongoose: npm install mongoose @nestjs/mongoose...执行上面的终端命令之后,app.module.ts 代码已经发生了变化,在文件顶部自动引入了 UserModule,同时也在 @Module 装饰器 imports 引入了 UserModule...举个例子,我们 controller 接收到了一个用户查询请求,我们不能直接在 controller 中去查询数据库并返回,而是要将查询请求交给 provider 来处理,这里我们创建了一个 UserService...{} 当然,provider 不一定只能用来提供数据库操作服务,还可以用来做一些用户校验,比如使用 JWT 对用户权限进行校验策略,就可以写成一个策略类,放到 provider ,为模块提供相应服务...Model,这样才能在类方法里操作数据库。

20110

Node.js服务端开发教程 (三):NestJS路由与控制器

NestJS框架定义了若干个专门用于路由处理相关装饰器,通过它们,可以非常容易将普通class类装饰成一个个路由控制器。...,它们都可以接收一个名为fromURL查询字符串参数,然后将拼接后整个问候语输出到请求响应中去。...可以通过这个URL试一下效果: http://localhost:3000/home/greeting?from=一斤代码 浏览器访问效果如下: ?...对于这种情况,服务端程序是不太可能会为每一个日期都编写一个控制器函数(除非写这个网站程序员是个奇葩),最可能情况就是只有一个控制器函数,这个函数能从URL上获取动态日期这部分信息,然后根据获取到日期去数据库查询对应日期文章信息...当我们向服务端发送POST请求时候,参数一般都会是放入请求体进行携带,它可以比URL查询字符串携带更多数据量。

3.5K20

Nest.js 实战 (三):使用 Swagger 优雅地生成 API 文档

Swagger Core:用于创建、使用和处理 OpenAPI 定义 Java 相关库Swagger Parser:用于解析 OpenAPI 定义独立库Swagger APIDom:提供了一个单一...、统一结构,用于跨各种描述语言和序列化格式描述 APINest 集成 Swagger 1、 安装依赖pnpm add @nestjs/swagger swagger-ui-express 2、 在 main.ts...文件定义并初始化 SwaggerModule 类import { NestFactory } from '@nestjs/core';import { DocumentBuilder, SwaggerModule...为 DTO 类型属性添加元数据,描述、默认值等@ApiQuery描述查询参数,包括名称、类型、描述等@ApiHeader描述请求头信息,包括名称、类型、描述等@ApiExcludeEndpoint标记一个控制器方法不在...Swagger UI 显示效果图总结在 Nest 中集成 Swagger 文档可以帮助开发者自动生成和维护 API 文档,Swagger 集成提供了在线生成、‌自动生成、‌可操作数据库等优点,规范了

13210

Nest.js 实战 (四):利用 Pipe 管道实现数据验证和转换

在 Nest.js ,管道(Pipelines) 是一种强大功能,用于预处理进入控制器方法请求数据,请求体、查询参数、路径参数等。...以下是 Nest.js 管道一些主要用途:数据转换:管道 ParseIntPipe、ParseFloatPipe、ParseArrayPipe 等可以将原始输入数据转换为应用内部所需类型,将字符串转换为整数或浮点数...ParseBoolPipe:将字符串类型参数转换为布尔值ParseArrayPipe:将字符串形式数组转换为数组ParseUUIDPipe:解析字符串并验证是否为 UUIDParseEnumPipe...types.includes(metatype); } } 3、 main.ts 全局注册: import { NestFactory } from '@nestjs/core'; import...: string;}如果我们提交请求体缺少了参数,它就会提示:2、假如我们有一个查询岗位详情接口如下:import { Body, Controller, Get, ParseUUIDPipe}

11910

在 Nest.js 编写 SQL 另一种方式(MyBatisMapper)

在 Nest.js 开发我们通常会选择 TypeORM 框架操作数据库,这对前端 SQL 弱来说确实是有很大帮助。但对于一些复杂查询显得有点麻烦,甚至比直接写 SQL 更复杂。...下面举了几个例子对比几种写法区别和优缺点。以及如何在 Nest.js 使用 MyBatis 语法。 需求 现在有以下表结构,学生表、学科表、分数表。来表示学生学科考了多少分这个需求。...foreach> ORDER BY sc.score ${scoreSort} 目前没有 JS 版本解析器...,有作者开源了一个解析器 mybatis-mapper 不包含映射部分也可以使用,可以点击文档了解下基本用法。...对于小项目也没必要引入额外概念,项目复杂点是需要考虑一种更统一管理方式,对于本就复杂功能还写那么复杂构建查询,如果都使用原生 SQL 去实现功能了,不如试试在 XML 写。

13410
领券