如何为graphql-yoga
中定义为解析器的参数创建一个Mutation,
const resolvers =
Mutation: {
createProject(root, args) {
const id = (Number(last(data.projects).id) + 1).toString()
const newProject = { ...args, id: id }
...
我尝试了以下操作:
mutation CreateProject($name: String!) {
createProject {
data: {
name: $name
}
}
}
和
mutation CreateProject($name: String!) {
createProject($name: name) {
statusCode
}
}
产生
和其他各种结构失败。
在项目README或三个示例中的任何一个中,似乎都没有提及Mutation。
更新
我正在使用:
mutation CreateProject($name: String!) {
createProject(name: $name) {
id
name
}
}
与我在网上看到的示例非常相似,我觉得它必须是有效的并且语法不会被拒绝。
架构定义为:
scalar ID
type Project {
id: ID
type: ProjectType
name: String
}
interface MutationResult {
statusCode: Int
message: String
}
type ProjectMutationResult implements MutationResult {
statusCode: Int
message: String
project: Project
}
type Mutation {
createProject: ProjectMutationResult
}
不过,提交突变后,我会收到:
{
"error": {
"errors": [
{
"message": "Unknown argument \"name\" on field \"createProject\" of type \"Mutation\".",
"locations": [
{
"line": 2,
"column": 17
}
]
},
{
"message": "Cannot query field \"id\" on type \"ProjectMutationResult\".",
"locations": [
{
"line": 3,
"column": 5
}
]
},
{
"message": "Cannot query field \"name\" on type \"ProjectMutationResult\".",
"locations": [
{
"line": 4,
"column": 5
}
]
}
]
}
}
答案 0 :(得分:2)
根据您的类型定义:
createProject
突变不包含任何参数:type Mutation {
createProject: ProjectMutationResult
}
ProjectMutationResult
类型没有id
字段,也没有name
字段:type ProjectMutationResult implements MutationResult {
statusCode: Int
message: String
project: Project
}
因此,当您运行突变时:
mutation CreateProject($name: String!) {
createProject(name: $name) {
id
name
}
}
您在为GraphQL服务器提供的内容与实际期望的内容之间存在完全差异。
因此,首先,如果希望在创建项目时为项目设置name
,则需要将createProject
的定义修改为:
type Mutation {
createProject(name: String!): ProjectMutationResult
}
(如果您希望命名为可选,请将名称设置为String
类型,而不是String!
)
然后,假设您想从突变中检索新创建的项目ID和名称,请将突变本身更改为:
mutation CreateProject($name: String!) {
createProject(name: $name) {
project {
id
name
}
}
}
您需要执行此操作,因为您的createProject
变异返回一个ProjectMutationResult
,它本身包含一个project
类型的Project
字段,该字段定义了{{1 }}和id
字段。