变量'$_数据';在带有Prisma的GraphQL中不能是非输入类型
我将Prisma与GraphQL一起使用,在运行mutatioin时出现错误。 我成功地部署了prisma,并将其与本地graphQL绑定 --datamodel.graphql-prisma设置变量'$_数据';在带有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!
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标志重试,以确保部署新列。