变量'$_数据';在带有Prisma的GraphQL中不能是非输入类型

变量'$_数据';在带有Prisma的GraphQL中不能是非输入类型,graphql,mutation,prisma,Graphql,Mutation,Prisma,我将Prisma与GraphQL一起使用,在运行mutatioin时出现错误。 我成功地部署了prisma,并将其与本地graphQL绑定 --datamodel.graphql-prisma设置 type Link { id: ID! @unique description: String! url: String! postedBy: User } type User { id: ID! @unique name: String! email: String!

我将Prisma与GraphQL一起使用,在运行mutatioin时出现错误。 我成功地部署了prisma,并将其与本地graphQL绑定

--datamodel.graphql-prisma设置

type Link {
  id: ID! @unique
  description: String!
  url: String!
  postedBy: User
}

type User {
  id: ID! @unique
  name: String!
  email: String! @unique
  password: String!
  links: [Link!]!
}
--schema.graphql-本地设置

# import Link from "./generated/prisma.graphql"
type Query {
  info: String!
  feed: [Link!]!
}

type Mutation {
  post(url: String!, description: String!): Link!
  signup(email: String!, password: String!, name: String!): AuthPayload
  login(email: String!, password: String!): AuthPayload
}

type AuthPayload {
  token: String
  user: User
}

type User {
  id: ID!
  name: String!
  email: String!
  links: [Link!]!
}
注册变异的解析器是

async function signup(parent, args, context, info) {
  // 1
  const password = await bcrypt.hash(args.password, 10)
  // 2
  const user = await context.db.mutation.createUser({
    data: { ...args, password },
  }, `{ id }`)

  // 3
  const token = jwt.sign({ userId: user.id }, APP_SECRET)

  // 4
  return {
    token,
    user,
  }
}
这是.graphqlconfig.yml内容

projects:
  app:
    schemaPath: src/schema.graphql
    extensions:
      endpoints:
        default: http://localhost:4000
  database:
    schemaPath: src/generated/prisma.graphql
    extensions:
      prisma: database/prisma.yml
我运行的GraphQL查询是

mutation {
  signup(
    name: "Alice"
    email: "alice@graph.cool"
    password: "graphql"
  ) {
    token
    user {
      id
    }
  }
}
当我运行此程序时得到的响应是

{
  "data": {
    "signup": null
  },
  "errors": [
    {
      "message": "Variable '$_data' cannot be non input type 'UserCreateInput!'. (line 1, column 19):\nmutation ($_data: UserCreateInput!) {\n                  ^",
      "locations": [],
      "path": [
        "createUser"
      ]
    }
  ]
}
我找不到原因


谢谢。

我想你的prisma.yml错了

# The endpoint represents the HTTP endpoint for your Prisma API. It encodes
# several pieces of information:
# * Prisma server (`localhost:4466` in this example)
# * Service name (`myservice` in this example)
# * Stage (`dev` in this example)
# NOTE: When service name and stage are set to `default`, they can be omitted.
# Meaning http://myserver.com/default/default can be written as http://myserver.com.
endpoint: http://localhost:4466/myservice/dev

通过在index.js中更改为右端点修复了此问题

const server = new GraphQLServer({
   typeDefs: './src/schema.graphql',
   resolvers,
   context: req => ({
       ...req,
       db: new Prisma({
           typeDefs: 'src/generated/prisma.graphql',
           endpoint: 'http://localhost:4466/local/dev',
           secret: 'secret',
           debug: true,
       }),
   }),
})
尝试使用prisma部署--强制


这对我很有效。

你有没有发现是什么原因造成的?我遇到了一个类似的问题。我也遇到了同样的问题,但似乎无法找出问题的原因。这解决了我的问题!如果您只是在学习本教程,那么在运行授权章节中的“prisma deploy”时可能会错过警告。请使用--force标志重试,以确保部署新列。