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
}
]
}
}