【问题标题】:Resolving list field in GraphQL without struct在没有结构的 GraphQL 中解析列表字段
【发布时间】:2017-09-08 11:00:06
【问题描述】:

我有这个 GraphQL 类型:

type User {
    id: String
    name: String
}

定义
var UserObject = graphql.NewObject(graphql.ObjectConfig{
    Name: "User",
    Fields: graphql.Fields{
        "id": &graphql.Field{
            Type: graphql.String,
        },
        "name": &graphql.Field{
            Type: graphql.String,
        },
    },
})

在我的根查询中,我想用查询字段users链接一些用户:

var RootQuery = graphql.NewObject(graphql.ObjectConfig{
    Name: "RootQuery",
    Fields: graphql.Fields{
        "users": &graphql.Field{
            Type: graphql.NewList(UserObject),
            Resolve: func(p graphql.ResolveParams) (interface{}, error) {
                return Users{
                    User{
                      ID: "1",
                      NAME: "John",
                    },
                    User{
                      ID: "2",
                      NAME: "Jess"
                    }
                 }, nil
            },
        },
    },
})

type User struct {
    ID string
    NAME string
}

type Users []User

如您所见,我有 UserUsers 数据类型。到目前为止,一切顺利。

现在,假设我无法创建 UserUsers 结构,我可以在 Resolve 函数中返回什么来代替它们?

我想到了[]map[string]string。应该是这样的:

 var RootQuery = graphql.NewObject(graphql.ObjectConfig{
        Name: "RootQuery",
        Fields: graphql.Fields{
            "users": &graphql.Field{
                Type: graphql.NewList(UserObject),
                Resolve: func(p graphql.ResolveParams) (interface{}, error) {
                    users := []map[string]string {
                        map[string]string {
                            "id" : "1",
                            "name" : "John",
                        },
                        map[string]string {
                            "id" : "2",
                            "name" : "Jess",
                        },
                    }
                    return users, nil
                },
            },
        },
    })

但它不起作用。查询结果中的每个属性都是nil。有没有办法解决这个问题?请记住,我无法创建 User 结构。这必须是“通用的”。

【问题讨论】:

  • 您能否提供您要传递给graphql.NewListUserObject 的定义?
  • 完成。这是User类型的定义

标签: go graphql graphql-go


【解决方案1】:

您可以使用map[string]interface{} 代替map[string]string,它应该可以工作。为什么会这样?我真的不知道,我找不到任何关于 FieldResolveFn 的返回值可接受的文档。

users := []map[string]interface{}{{
    "id":   "1",
    "name": "John",
}, {
    "id":   "2",
    "name": "Jess",
}}
return users, nil

【讨论】:

  • 我很高兴能帮上忙;)。
猜你喜欢
  • 2017-06-03
  • 2019-09-28
  • 1970-01-01
  • 2020-10-07
  • 2021-07-28
  • 2020-09-07
  • 2021-07-26
  • 2020-08-26
  • 2022-01-11
相关资源
最近更新 更多