Elixir Absinthe GraphQL,联合 resolve_type list_of/1
Posted
技术标签:
【中文标题】Elixir Absinthe GraphQL,联合 resolve_type list_of/1【英文标题】:Elixir Absinthe GraphQL, Union resolve_type list_of/1 【发布时间】:2021-07-25 07:12:34 【问题描述】:我需要帮助。我正在寻找一种方法来解决联合中的 list_of(:object) 。 这就是我所做的。
object :community_queries do
field :search, type: :search_result do
arg(:keyword, non_null(:string))
resolve(&CommunityResolver.search/3)
end
end
...
union :search_result do
description "A search result"
types [:person, :business]
resolve_type fn
%Person, _ -> list_of(:person)
%Business, _ -> list_of(:business)
end
end
在上面的代码中。我试图将 list_of(:person) 放入 resolve_type 并返回这样的错误
invalid quoted expression: %Absinthe.Blueprint.TypeReference.Listerrors: [], of_type: :person
然后我尝试了这个
object :community_queries do
field :search, type: list_of(:search_result) do
arg(:keyword, non_null(:string))
resolve(&CommunityResolver.search/3)
end
end
...
union :search_result do
description "A search result"
types [:person, :business]
resolve_type fn
%Person, _ -> :person
%Business, _ -> :business
end
end
返回
(BadMapError) expected a map, got: [%name: "John", ...
我也试过把它放在这样的类型中,但也有错误。
...
types [list_of(:person), list_of(:business)]
resolve_type fn
...
是否有可能的解决方法?
【问题讨论】:
【参考方案1】:object :community_queries, do
field :search, type: list_of(:search_result) do
arg(:keyword, non_null(:string))
resolve(&CommunityResolver.search/3)
end
end
:community_queries
是一个查询参数,应该被定义为一个字段而不是一个查找个人或企业的对象,我们称它们为users
。这个定义的字段看起来像是返回:search_result
。
field :community_queries, :search_result do
arg(:keyword, non_null(:string))
resolve(&CommunityResolver.search/3)
end
您需要定义search_result
对象的外观,这听起来像是users
的列表。
更多关于查询参数here
【讨论】:
以上是关于Elixir Absinthe GraphQL,联合 resolve_type list_of/1的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Absinthe GraphQL 请求中接受 JSON
拨号器(通过 Dialyxir)从 Absinthe (GraphQL) 路由的 `forward` 命令发出有关“但此值不匹配”的警告。如何解决?