GraphQL 错误:输入类型中未定义字段

问题描述 投票:0回答:2

我的申请有误。我使用 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”字段未在类型中定义 文章创建输入

但是,当我在我的突变上记录参数时,我拥有所有字段!

reactjs graphql field apollo prisma
2个回答
0
投票

据我所知,这是一个 graphql 运行时问题,因此请尝试暂时用字符串或数字替换 DateTime 类型(如果您依赖纪元)。一个可能的问题是您正在使用这个非标准的 DateTime 标量,这意味着您需要一个解析器来转换这个 自定义类型,阿波罗将使用它来序列化它。如果由于某种原因这个转换器坏了,它可能会返回 null 或 undefined 这会产生你所拥有的错误。


0
投票

根据错误消息,您似乎忘记将Article模型与另一个相关模型一起引用。在 Prisma 中,您可以使用类似的东西:references: [id] 在 GraphCMS 中,在右上角的Add Field 菜单中找到Reference 按钮。

© www.soinside.com 2019 - 2024. All rights reserved.