12
votes

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.

2

2 Answers

12
votes

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.

0
votes

I think in you addGroup() mutation the args for name is of type String! that is new GraphQLNonNull(GraphQLString) but in your mutation you specify as String which conflicts with the type system.