Graphql: схема не настроена для мутаций в Go - PullRequest
4 голосов
/ 04 августа 2020

Я пытаюсь написать Graphql Mutation внутри Go. Я использую библиотеку github.com/graphql-go/graphql.

Вот код, который я написал для того же.

package main

import (
  "bytes"
  "encoding/json"
  "fmt"
  "io/ioutil"
  "net/http"

  "github.com/graphql-go/graphql"
)

type userMaster struct {
  Name string `json:"userName"`
  ID   string `json:"emailID"`
}

var user userMaster

func main() {
fmt.Println("Hello world !!!")

userType := graphql.NewObject(
    graphql.ObjectConfig{
        Name: "userMaster",
        Fields: graphql.Fields{
            "userName": &graphql.Field{
                Type: graphql.String,
            },
            "emailID": &graphql.Field{
                Type: graphql.String,
            },
        },
    },
)

rootMutation := graphql.NewObject(graphql.ObjectConfig{
    Name: "Mutations",
    Fields: graphql.Fields{
        "createUser": &graphql.Field{
            Type: userType,
            Args: graphql.FieldConfigArgument{
                "userName": &graphql.ArgumentConfig{
                    Type: graphql.NewNonNull(graphql.String),
                },
                "emailID": &graphql.ArgumentConfig{
                    Type: graphql.NewNonNull(graphql.String),
                },
            },
            Resolve: func(params graphql.ResolveParams) (interface{}, error) {
                user.Name = params.Args["userName"].(string)
                user.ID = params.Args["emailID"].(string)
                return user, nil
            },
        },
    },
})

schema, _ := graphql.NewSchema(graphql.SchemaConfig{
    Mutation: rootMutation,
})

http.HandleFunc("/graphql", func(w http.ResponseWriter, r *http.Request) {
    result := graphql.Do(graphql.Params{
        Schema:        schema,
        RequestString: r.URL.Query().Get("query"),
    })
    json.NewEncoder(w).Encode(result)
})

http.ListenAndServe(":8080", nil)
}

Когда я пытаюсь запустить команду от почтальона, я получаю сообщение об ошибке {"data": null, "errors": [{"message": "Схема не настроена для мутаций", "locations": [{"line": 1, "column": 1}]}]}

http://localhost:8080/graphql?query=mutation+_{createUser(userName:"ABC",emailID:"abc@abc.com"){userName,emailID}}

это URL-адрес, который я пытаюсь получить от почтальона. Я имею в виду Начало работы с GraphQL Использование Golang для реализации мутации в Go

Может ли кто-нибудь помочь, какие изменения здесь необходимо сделать?

1 Ответ

2 голосов
/ 04 августа 2020

Для схемы, которую вы используете для мутации, требуется объект запроса.

schema, _ := graphql.NewSchema(graphql.SchemaConfig{
    // QUERY NEEDED HERE !
    Mutation: rootMutation,
})

Запрос для userType может быть определен следующим образом и добавлен в схему.

rootQuery := graphql.NewObject(graphql.ObjectConfig{
    Name: "Query",
    Fields: graphql.Fields{
        "lastUser" : &graphql.Field{ // "lastUser" name can be anything
            Type: userType,
        },
    },
})

schema, _ := graphql.NewSchema(graphql.SchemaConfig{
    Query:    rootQuery,
    Mutation: rootMutation,
})

Это исправит ошибку "Schema is not configured for mutations" и ваши мутации будут успешно выполнены.

...