NestJS框架下如何为复杂嵌套数组定义正确的GraphQL返回类型
NestJS GraphQL 嵌套数组返回字段为null 解决方案
- 第一点:你定义的 GraphQL 对象类型字段未添加
@Field()装饰器,NestJS 不会自动映射未标注的字段,所以返回值直接为 null - 第二点:你当前的原始返回数据是二维数组结构,和你定义的
Grouped对象结构不匹配,字段无法对应上
步骤1:修正 ObjectType 类型定义
给所有需要暴露的 GraphQL 字段添加 @Field() 装饰器,代码如下:
import { ObjectType, Field } from '@nestjs/graphql'; @ObjectType() export class Grouped { @Field() Id: string; @Field(() => [SumPerDay]) SumPerDay: SumPerDay[]; } @ObjectType() class SumPerDay { @Field() x: string; @Field() y: number; }
步骤2:转换原始数据结构,适配 Grouped 类型
你当前的原始数据是二维数组结构,每个子项格式为 [{ Id: 'xxx' }, [[{x:xxx,y:xxx}], ...]],需要先转换为符合 Grouped 定义的对象数组,同时把嵌套两层的日统计数组拍平:
// 假设你从数据库/接口拿到的原始数据为 rawData const formattedData = rawData.map(item => { return { Id: item[0].Id, // 原始日统计数据嵌套了两层,用flat()拍平一层 SumPerDay: item[1].flat() } })
步骤3:在Resolver中返回转换后的数据
确认你的解析器方法返回值为转换后的 formattedData,且返回类型声明为 Grouped[]:
@Query(() => [Grouped]) async getGroupedData() { const rawData = await yourDataFetchMethod(); // 你的原始数据获取逻辑 const formattedData = rawData.map(item => ({ Id: item[0].Id, SumPerDay: item[1].flat() })) return formattedData; }
内容的提问来源于stack exchange,提问作者Royal
相关产品推荐
相关产品推荐

