首页 > 解决方案 > GraphQL - 数据不能是非输入类型...配置损坏?

问题描述

我似乎遇到了一个我无法弄清楚的问题。

Challenge我在我的创建了一个新类型datamodel.prisma

type Challenge {
    id: ID! @id
    createdAt: DateTime! @createdAt
    updatedAt: DateTime! @updatedAt
    completed: Boolean! @default(value: false)
    title: String!
}

我的变异解析器

# import * from './generated/prisma.graphql'

type Mutation {
    createChallenge(title: String!): Challenge!
}

长这样prisma.graphql

type Mutation {
  createChallenge(data: ChallengeCreateInput!): Challenge!
}

input ChallengeCreateInput {
  id: ID
  completed: Boolean
  title: String!
}

我正在使用操场创建数据库条目(当我为此创建前端逻辑时问题仍然存在):

mutation {
  createChallenge(title: "Test Entry") {
    id
    title
  }
}

最后,我的服务器端逻辑:

async createChallenge(parent, args, ctx, info) {
    console.log(args);
    const challenge = ctx.db.mutation.createChallenge(
        {
            data: {
                ...args,
            },
        },
        info
    );
    console.log(challenge);
    return challenge;
},

然后我在操场上收到以下错误:

{
  "data": null,
  "errors": [
    {
      "message": "Variable '$_v0_data' cannot be non input type 'ChallengeCreateInput!'. (line 1, column 22):\nmutation ($_v0_data: ChallengeCreateInput!) {\n                     ^",
      "locations": [],
      "path": [
        "createChallenge"
      ]
    }
  ]
}

我不明白这条消息是从哪里来的。通过将数据传播到data.

我昨天遇到了一个问题,我的服务器端逻辑不会更新,即使在通过prisma reset. 我的数据模型上有一个challenge已删除的字段,但是在提交突变时,服务器仍然出错,说它缺少该字段。会不会跟那个有关系?

重要的是要知道,通常,每次你运行prisma deploy并且没有什么要更新的时候,它会告诉你nothing to update。目前,每次我运行时都会prisma deploy添加和删除相同的字段。这应该只发生一次。

我如何让这个突变起作用?

标签: reactjsgraphqlnext.jsprisma

解决方案


很可能您的问题与 ID 字段有关。您已将 id 定义为在 Prisma 模型中自动生成,即使您在输入类型中提供了该字段。因此,从输入中删除 ID 字段,然后尝试。

希望这可以帮助!让我知道!


推荐阅读