NestJs:确保你的班级用合适的装饰器装饰
Posted
技术标签:
【中文标题】NestJs:确保你的班级用合适的装饰器装饰【英文标题】:NestJs: Make sure your class is decorated with an appropriate decorator 【发布时间】:2021-05-19 08:36:17 【问题描述】:我使用graphql-request
作为 GraphQL 客户端来查询无头 CMS 以获取内容、修改并返回到原始请求/查询。无头 cms 单独托管,仅供参考。
我有以下代码:
@Query(returns => BlogPost)
async test()
const endpoint = 'https://contentxx.com/api/content/project-dev/graphql'
const graphQLClient = new GraphQLClient(endpoint,
headers:
authorization: 'Bearer xxxxxxx',
,
)
const query = gql`
findContentContent(id: "9f5dde89-7f9b-4b9c-8669-1f0425b2b55d")
id
flatData
body
slug
subtitle
title
`
return await graphQLClient.request(query);
BlogPost
是具有以下类型的模型:
import Field, ObjectType from '@nestjs/graphql';
import BaseModel from './base.model';
import FlatDateType from '../resolvers/blogPost/types/flatDatatype.type';
@ObjectType()
export class BlogPost extends BaseModel
@Field( nullable: true )
id!: string;
@Field((type) => FlatDateType)
flatData: FlatDateType;
而FlatDateType
有如下代码
export default class FlatDateType
body: string;
slug: string;
subtitle: string;
title: string;
它抛出以下异常:
错误:无法确定“flatData”的 GraphQL 输出类型。制作 确保您的班级使用适当的装饰器进行装饰。
这里缺少什么?
【问题讨论】:
【参考方案1】:当没有关于 FlatDataType
的信息被传递给 graphql 解析器时,您的 graphql 服务器应该如何理解它的类型?您还需要将 graphql 装饰器添加到其中。 @ObjectType()
、@Field()
等
【讨论】:
【参考方案2】:FlatDataType
未定义为 @ObjectType()
,因此 type-graphql(或 @nestjs/graphql)不能将其作为 GraphQL 中的输出。
【讨论】:
以上是关于NestJs:确保你的班级用合适的装饰器装饰的主要内容,如果未能解决你的问题,请参考以下文章
NestJS - 如何使用 @Body() 装饰器访问帖子正文?