NestJS Schema First GraphQL 序列化

Posted

技术标签:

【中文标题】NestJS Schema First GraphQL 序列化【英文标题】:NestJS Schema First GraphQL Serialization 【发布时间】:2021-06-17 07:01:09 【问题描述】:

我对 NestJS/GraphQL 的响应序列化主题进行了一些研究。 here 有一些有用的信息,但文档似乎完全集中在代码优先的方法上。我的项目恰好采用模式优先的方法,从我阅读的几个来源来看,模式优先项目的可用选项是为解析器实现拦截器,并在那里执行序列化。

在我开始编写这些拦截器之前,我的问题是: Nestjs 是否提供了更好的选项来实现模式优先方法的序列化?

【问题讨论】:

你想在这里做什么样的序列化?您的响应应该与架构创建的响应相匹配,并且大多数情况下,后台的阿波罗服务器会为您处理好,只要您返回正确形状的数据 这是一个公平的观点,我的架构应该与响应匹配。话虽如此,我并不是真的试图排除或公开任何字段,更多的是清理响应中的值、舍入数字或删除空值。我意识到这可以在响应之前在其他地方完成,但我的理由是序列化是处理这些数据显示问题的好地方。 【参考方案1】:

如果它只是值的转换,那么拦截器就是一个很好的工具。就框架的高级概念(拦截器、管道、过滤器等)而言,“代码优先”显示的所有内容都应该适用于“模式优先”。事实上,一旦服务器开始运行,这两种方法以及它们的运行方式之间就不应该有明显的区别。您需要关注的最重要的事情是,您将无法轻易利用class-transformerclass-validator,因为原始类定义是通过gql-codegen 创建的,但您仍然可以扩展它们如果您愿意,可以键入并添加必要的装饰器。

【讨论】:

以上是关于NestJS Schema First GraphQL 序列化的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个Schema为空.....如何在nestjs中设置@ApiProperty

无法在运行时将 schema.gql 写入 Google 的 App Engine NestJS

GraphQL Schema 未使用 NestJS 更新(代码优先方法)

如何使用来自@nestjs/mongoose 的@Prop 装饰器添加嵌套的对象数组

深度优先遍历(Depth-First Traversa Undirected Graph)

Nestjs中的MissingSchemaError