【问题标题】:Syntax for submitting a mutation to a graphql-relay mutationWithClientMutationId将突变提交到 graphql-relay 突变WithClientMutationId 的语法
【发布时间】:2016-05-06 08:41:15
【问题描述】:

我使用 graphql-relay 定义了一个 GraphQL 突变,但在弄清楚如何向它提交突变时遇到了问题。

以下是相关架构:

const userType = new GraphQLObjectType({
  name: 'User',
  description: 'user',
  fields: () => ({
    id: {
      type: new GraphQLNonNull(GraphQLString),
      description: 'The UUID for the user.',
      resolve(user) {
        return user.uuid;
      },
    },
  })
});

const registerUser = mutationWithClientMutationId({
  name: 'registerUser',
  inputFields: {
  },
  outputFields: {
    user: {
      type: userType,
      resolve: (payload) => {
        models.user.findById(payload.userId);
      }
    },
  },
  mutateAndGetPayload: (args) => {
    var newUser = models.user.build().save();
    return {
      userId: newUser.id,
    };
  }
});


const rootMutation = new GraphQLObjectType({
  name: 'RootMutationType',
  fields: {
    registerUser: registerUser,
  },
});

const schema = new GraphQLSchema({
  query: rootQuery,
  mutation: rootMutation,
});

注册新用户并取回 userId 的 HTTP 调用应该是什么样的?

谢谢!

【问题讨论】:

    标签: relayjs graphql graphql-js


    【解决方案1】:

    我想指出,我看到您说您的突变不需要参数 - 它如何知道新用户的详细信息是什么?最终,您可能需要一些有关该突变的参数。在第一个函数参数上,您的mutateAndGetPayload 可以使用它们。 (我并不是说每个突变都需要参数,但这个可能需要)

    如果您使用 Relay,official document 上有一些关于如何使用 Relay 中的突变的非常好的信息。特别是在底部,它显示了各种 mutator 配置。如果您正在使用连接,您可能希望使用RANGE_ADD 手动将此新帐户添加到中继存储,否则如果您想执行更广泛的重新获取,您可以使用FIELDS_CHANGE。您说在突变完成后您需要新的用户 ID。如果您使用 Relay,您可能需要查看 REQUIRED_CHILDREN 以指定无论 Relay 将构建何种计算查询,您始终希望查询该 id。

    突变的输出是userType,因此您可以使用有效负载类型上的片段访问它,这可能是RegisterUserPayload,看起来可能类似于...

    fragment on RegisterUserPayload {
      user {
        id
      }
    }
    

    现在,假设您使用的是 Relay。如果您想通过 GraphiQL 手动尝试此操作,那么您可以使用 GraphQL Mutation docs 上的如何通过那里进行突变的示例。有一个直接的例子说明你如何查询你的突变。

    最后,由于您在自己发出 HTTP 请求的低级别询问如何执行此操作,因此您可以查看 express-graphql 文档,which explains 如何查询它。

    【讨论】:

    • 有道理。谢谢瑞恩!
    【解决方案2】:

    我想出了一种可行的突变格式:

    mutation RootMutationType {
      registerUser(input:{clientMutationId:"123"}){
        clientMutationId, user { id }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-05-30
      • 2017-05-05
      • 2016-01-13
      • 2017-02-27
      • 2023-03-19
      • 2019-01-23
      • 2021-03-09
      • 2017-10-25
      • 2020-12-31
      相关资源
      最近更新 更多