将数据从反应传递到 graphql 的问题

Problem with passing data to graphql from react

我有用户名和密码,我想从前端的反应发送到 graphql 后端。为此我正在使用 apollo 客户端

在我的客户端,我有这个

const REGISTER_USER = gql`
  mutation RegisterUser($username: String!, $password: String!) {
    registerUser(username: $username, password: $password) {
      username,
      password
    }
  }
`;

我是这样称呼它的

registerUser({ variables: { username: values.username, password: values.password } })

在我的服务器上

const UserType = new GraphQLObjectType({
    name: 'user',
    fields: () => ({
        username: { type: GraphQLString },
        password: { type: GraphQLString }
    })
});
const Mutations = new GraphQLObjectType({
    name: 'Mutation',
    fields: {
        registerUser: {
            type: UserType,
            args: {
                username: { type: GraphQLString },
                password: { type: GraphQLString }
            },
            resolve(username, password) {
                console.log(username, password, 123)
            }
        },
    }
})

问题是 - 我将密码和用户名作为字符串分别传递,但我的 console.log(username, password, 123) 突变返回 undefined 和带有用户名、密码字段的完整对象。

我不确定我哪里做错了。 非常感谢所有帮助。

resolve 函数有 sourceargscontextinfo 作为参数。您可以在 resolver function signature.

中阅读更多相关信息

所以基本上你要求 sourceargs,这就是为什么一个是 undefined 而另一个是参数的对象。在解析器中获取变量的方法是:

const Mutations = new GraphQLObjectType({
    name: 'Mutation',
    fields: {
        registerUser: {
            type: UserType,
            args: {
                username: { type: GraphQLString },
                password: { type: GraphQLString }
            },
            resolve: (source, args) {
                console.log(args.username, args.password)
                // HERE: you can access your arguments input as part of the 'args' object
            }
        },
    }
})