Search code examples
graphqlgraphql-js

GraphQL mutation variables


I'm trying to do a simple mutation using GraphQL with the GraphiQL interface. My mutation looks like this:

mutation M($name: String) {
    addGroup(name:$name) {
        id,
        name
    }
}

with variables:

{
    "name": "ben"
}

But it gives me the error: Variable $name of type "String" used in position expecting type "String!"

If I change my mutation to mutation M($name: String = "default") it works as expected. This looks like it's related to the type system, but I can't seem to figure out what the problem is.


Solution

  • You probably defined the input name as a non-null string (something like type: new GraphQLNonNull(GraphQLString) if using js server, or String! in plain GraphQL).

    So your input in the mutation must match, which means it must also be a non-null string. If you change to the following, it should work:

    mutation M($name: String!) {
      addGroup(name:$name) {
        id,
        name
      }
    }
    

    Also if you define a default value as you did, it will be a non-null string.

    Finally, you could drop the requirement of being a non-null in the server.