首页 > 解决方案 > 从反应将数据传递给graphql的问题

问题描述

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

在我的客户端我有这个

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)的 in 突变返回undefined完整的对象,其中包含用户名、密码字段。

我不确定我在哪里做错了什么。所有的帮助将不胜感激。

标签: reactjsgraphqlapollo-client

解决方案


resolve函数具有sourceargscontext作为info参数。您可以在解析器函数签名中了解更多信息。

所以基本上你要求sourceand args,这就是为什么一个是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
            }
        },
    }
})

希望能帮助到你。


推荐阅读