我的应用程序中有一个错误。我使用了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!
}
我的模式.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={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中
但是,当我记录我的突变的参数时,我有我所有的字段!
2条答案
按热度按时间xxhby3vn1#
据我所知,这是一个graphql运行时问题,因此请尝试临时将DateTime类型替换为字符串或数字(如果你依赖于一个纪元)。一个可能的问题是你正在使用这个非标准的DateTime标量,这意味着你需要一个解析器来转换这个自定义类型,一个apollo将使用它来序列化它。如果由于某种原因这个转换器坏了,它可能返回null或undefined,这将产生您所遇到的错误。
sd2nnvve2#
根据错误消息,您似乎忘记了使用其他相关模型引用 Article 模型。在Prisma中,您可以使用类似于以下内容的内容:参考文献:[id]并在GraphCMS中找到右上角Add Field菜单上的 Reference 按钮。