为啥 GraphQl 说我忘记为突变发送参数 [重复]

Posted

技术标签:

【中文标题】为啥 GraphQl 说我忘记为突变发送参数 [重复]【英文标题】:Why GraphQl says that I forgot send args for mutation [duplicate]为什么 GraphQl 说我忘记为突变发送参数 [重复] 【发布时间】:2020-04-21 20:36:15 【问题描述】:

我有一个包含几个突变和查询的 graphql 模式。我认为只有在我将 mutation ... 发送到 graphql 服务器时才应该调用突变验证,但目前,服务器说我没有为所有声明的突变发送参数。

type User 
  id: ID!,
  username: String!


type Auth 
  username: String
  password: String


enum Kind 
  COMPANY
  PERSONAL
  FREELANCE
  OPEN_SOURCE


type Job 
  kind: Kind!
  name: String
  link: String
  github: String
  npm: String
  isTool: Boolean
  address: String


type Project 
  year: Int!
  description: [String]!
  job: Job
  name: String
  notImportant: Boolean
  prefix: String
  tags: [String]!
  teamSize: String


type Query 
  projects: [Project!]!
  me: User


type Mutation 
  login(authData: Auth): Boolean
  addProject(project: Project): ID!


schema 
  query: Query
  mutation: Mutation

我通过graphql-tools 创建可执行架构:


export const graphqlSchema = makeExecutableSchema(
  typeDefs: `*here is that schema*`,
  resolvers: mergeResolvers([projectResolvers, authResolvers]) as any,
  resolverValidationOptions: 
    requireResolversForResolveType: false,
    requireResolversForArgs: false,
    requireResolversForAllFields: false,
  ,
  allowUndefinedInResolve: true,
);

makeExecutableSchema 它是graphql-tools 包的导出的一部分) (resolvers中的数据是不包含Mutation的对象)

当我使用express-graphql 启动快速服务器并打开graphiql 并输入查询(不是突变)以获取我的项目时,它说我:

我做错了什么? 希望得到您的帮助,谢谢!

【问题讨论】:

【参考方案1】:

嘿,我在自己的问题上找到了答案。 GraphQl 告诉我应该在模式中修复什么,但我不理解他。 输入类型(突变的参数应该是输入类型):

input MyInput 
  foo: String


...
type Mutation 
  getBar(foo: MyInput): String

【讨论】:

以上是关于为啥 GraphQl 说我忘记为突变发送参数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

既不是突变也不是查询的 Apollo/GraphQL 动作

Flutter / GraphQL - 以自定义类型为参数的突变

为啥每个 GraphQL 查询/突变都有“两个名称”?

Next.js 在 GraphQL 突变内重定向

GraphQL - 参数未在突变中传递到后端

突变查询 graphql-java