繁体   English   中英

用于将突变提交到graphql-relay variantWithClientMutationId的语法

[英]Syntax for submitting a mutation to a graphql-relay mutationWithClientMutationId

我使用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,
});

HTTP调用应如何注册新用户并取回userId?

谢谢!

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

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

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

fragment on RegisterUserPayload {
  user {
    id
  }
}

现在,假设您正在使用中继。 如果您想通过GraphiQL手动尝试此操作,则可以在GraphQL Mutation docs上使用有关如何进行突变的示例。 有一个直接的示例说明了如何查询突变。

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

我想出了一种有效的突变格式:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM