gpt4 book ai didi

node.js - 在 graphql-yoga 中定义 Mutation 参数

转载 作者:搜寻专家 更新时间:2023-11-01 00:49:22 24 4
gpt4 key购买 nike

如何为 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
}
}

产生

enter image description here

和其他各种结构均未成功。

在项目自述文件或三个示例中似乎都没有提到 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
}
]
}
]
}
}

最佳答案

根据您的类型定义:

  1. createProject突变不期望任何参数:
type Mutation {
createProject: ProjectMutationResult
}
  1. 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 ,这是定义 id 的那个和 name字段。

关于node.js - 在 graphql-yoga 中定义 Mutation 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54612729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com