GraphQL 错误:输入类型中未定义字段
Posted
技术标签:
【中文标题】GraphQL 错误:输入类型中未定义字段【英文标题】:GraphQL Error : Field is not defined in the input type 【发布时间】:2020-01-09 03:03:33 【问题描述】:我的申请中有错误。我使用 Next.js / ApolloClient / GraphQL 和 Prisma。该错误与 GraphQL 架构有关,它在 Mutation
中使用:
错误:原因:“end_date”字段“end_date”未在 输入类型 ArticleCreateInput
我尝试在每个文件上复制/粘贴全局架构以获得良好的对应数据,但它不起作用。
我的数据模型(datamodel.prisma):
type Article
id: ID! @id
title: String!
description: String!
createdAt: DateTime! @createdAt
updatedAt: DateTime! @updatedAt
image: String
maxUserNumber: Int!
greatImage: String
street: String!
begin_date: DateTime!
end_date: DateTime!
price: Int!
user: User!
我的 schema.graphql:
createArticle(
title: String!
description: String!
image: String
maxUserNumber: Int!
greatImage: String
street: String!
begin_date: DateTime!
end_date: DateTime!
price: Int!
): Article!
在我的生成文件 (prisma.graphql) 中:
input ArticleCreateInput
id: ID
title: String!
description: String!
image: String
maxUserNumber: Int
greatImage: String
street: String
begin_date: DateTime
end_date: DateTime
price: Int!
user: UserCreateOneInput!
客户端突变和状态:
const CREATE_ARTICLE_MUTATION = gql`
mutation CREATE_ARTICLE_MUTATION(
$title: String!
$description: String!
$image: String
$maxUserNumber: Int!
$greatImage: String
$street: String!
$begin_date: DateTime!
$end_date: DateTime!
$price: Int!
)
createArticle(
title: $title
description: $description
image: $image
maxUserNumber: $maxUserNumber
greatImage: $greatImage
street: $street
begin_date: $begin_date
end_date: $end_date
price: $price
)
id
`;
export class CreateArticle extends Component
state =
adresse: "",
title: "",
description: "",
image: "",
greatImage: "",
price: 0,
nbPersons: 2,
loadigImg: false,
begin_date: moment(new Date(Date.now())).format("YYYY-MM-DD"),
end_date: moment(new Date(Date.now()))
.add(1, "days")
.format("YYYY-MM-DD")
;
使用 Mutation 调用:
<Mutation
mutation=CREATE_ARTICLE_MUTATION
variables=
...this.state,
maxUserNumber: this.state.nbPersons,
street: this.state.adresse
>
还有后端变异:
async createArticle(parent, args, ctx, info)
if (!ctx.request.userId)
throw new Error("Vous devez être connecté");
const article = await ctx.db.mutation.createArticle(
data:
user:
connect:
id: ctx.request.userId
,
...args
,
info
);
return article;
,
当我使用我的 createArticle 突变时,我有一个指定的错误:
原因 'end_date' 字段未在类型中定义 ArticleCreateInput
但是,当我在我的变异中记录 args 时,我拥有所有字段!
【问题讨论】:
你也可以添加你正在使用的突变逻辑吗?客户端也是:) 我在上面的描述中添加了这个。感谢您的帮助 GraphQL 默认将标识符转换为驼峰式。这很可能是你的问题。开始日期,结束日期 -> 开始日期,结束日期 【参考方案1】:据我了解,这是一个 graphql 运行时问题,因此请尝试将 DateTime 类型临时替换为字符串或数字(如果您依赖于纪元)。一个可能的问题是您正在使用这个非标准的 DateTime 标量,这意味着您需要一个解析器来转换这个 custom type,阿波罗将使用它来序列化它。如果由于某种原因此转换器损坏,它可能会返回 null 或 undefined,这会产生您确实遇到的错误。
【讨论】:
【参考方案2】:根据错误消息,您似乎忘记将 Article 模型与另一个相关模型进行引用。在 Prisma 中,您可以使用类似于以下内容的内容:references: [id] 并在 GraphCMS 的 Add Field 菜单上找到 Reference 按钮右上角。
【讨论】:
以上是关于GraphQL 错误:输入类型中未定义字段的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 Graphql 项目抛出错误:字段类型必须是输出类型但得到:未定义
[GraphQL 错误]:消息:“rootMutation”类型的字段“createUser”上的未知参数“email”。位置:[object Object],路径:未定义