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

pnwntuvh  于 2022-12-12  发布在  React
关注(0)|答案(2)|浏览(154)

我的应用程序中有一个错误。我使用了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
但是,当我记录我的突变的参数时,我有我所有的字段!

xxhby3vn

xxhby3vn1#

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

sd2nnvve

sd2nnvve2#

根据错误消息,您似乎忘记了使用其他相关模型引用 Article 模型。在Prisma中,您可以使用类似于以下内容的内容:参考文献:[id]并在GraphCMS中找到右上角Add Field菜单上的 Reference 按钮。

相关问题