Graphql 苦艾酒结果包含所有空值

Graphql 苦艾酒结果包含所有空值,graphql,elixir,dgraph,absinthe,Graphql,Elixir,Dgraph,Absinthe,我对长生不老药、凤凰和苦艾酒完全陌生……所以对我放松点。:) 我正在试验一个名为“使用一个名为”的库的图形数据库。我编写了一个简单的查询,用于查找并返回用户列表(目前我只有两个用户): IO.inspect(result)的输出正是我所期望和想要的——我的两个用户的列表: [ %{"email" => "rob@example.com", "name" => "Rob", "uid"

我对长生不老药、凤凰和苦艾酒完全陌生……所以对我放松点。:)

我正在试验一个名为“使用一个名为”的库的图形数据库。我编写了一个简单的查询,用于查找并返回用户列表(目前我只有两个用户):

IO.inspect(result)
的输出正是我所期望和想要的——我的两个用户的列表:

[
  %{"email" => "rob@example.com", "name" => "Rob", "uid" => "0x1"},
  %{"email" => "bridget@example.com", "name" => "Bridget", "uid" => "0x2"}
]
但是,当我使用GraphiQL运行此查询时,由于某些原因,结果中的所有值都是
null

{
  "data": {
    "users": [
      {
        "email": null,
        "name": null,
        "uid": null
      },
      {
        "email": null,
        "name": null,
        "uid": null
      }
    ]
  }
}

知道我做错了什么吗?

在我看来,您可以在用户解析程序中返回适当的数据,但有一个例外:当苦艾酒为每个用户解析字段时,只会将字段作为atom键进行查找。当在父映射中找不到
:uid
:email
:name
时,它将返回
nil

您可以将结果转换为将原子作为键。如果你想走这条路,一个选择就是映射每个用户,并显式复制你想要的内容

users=Enum.map(用户,&%{uid:&1[“uid”]、电子邮件:&1[“email”]、姓名:&1[“name”]})
不过,在添加键时,您还需要更新另一个地方。而且很多尝试更动态的解决方案都没有遵循最佳实践(他们打开应用程序,在运行时创建新的原子,这是个坏主意,或者在看到无法识别的键时抛出错误)

我过去使用的一个解决方案是创建自己的默认MapGet中间件,用于检查atom键和字符串键

defmodule MyAppWeb.GraphQL.Middleware.MapGet do
@moduledoc”“”
检查原子键和字符串键的默认解析器。
"""
@苦艾酒
@苦艾酒
def调用(%%{source:source}=info,key)do
价值观=

with:error在我看来,您可以在用户解析程序中返回适当的数据,但有一个例外:当苦艾酒为每个用户解析字段时,只会将字段作为atom键进行查找。当在父映射中找不到
:uid
:email
:name
时,它将返回
nil

您可以将结果转换为将原子作为键。如果你想走这条路,一个选择就是映射每个用户,并显式复制你想要的内容

users=Enum.map(用户,&%{uid:&1[“uid”]、电子邮件:&1[“email”]、姓名:&1[“name”]})
不过,在添加键时,您还需要更新另一个地方。而且很多尝试更动态的解决方案都没有遵循最佳实践(他们打开应用程序,在运行时创建新的原子,这是个坏主意,或者在看到无法识别的键时抛出错误)

我过去使用的一个解决方案是创建自己的默认MapGet中间件,用于检查atom键和字符串键

defmodule MyAppWeb.GraphQL.Middleware.MapGet do
@moduledoc”“”
检查原子键和字符串键的默认解析器。
"""
@苦艾酒
@苦艾酒
def调用(%%{source:source}=info,key)do
价值观=

错误:谢谢!我替换了默认的中间件,问题解决了。谢谢!我替换了默认的中间件,问题就解决了。
{
  "data": {
    "users": [
      {
        "email": null,
        "name": null,
        "uid": null
      },
      {
        "email": null,
        "name": null,
        "uid": null
      }
    ]
  }
}