![](/img/trans.png)
[英]GraphQL resolver with Laravel Lighthouse return string instead of JSON
[英]Lighthouse graphql custom resolver
GraphQL 和燈塔庫的新手,不要太苛刻。
因為我的數據源是一個 API,所以我不能使用任何模型。 我正在嘗試創建一個自定義解析器,它將數據傳遞給一個服務,該服務將執行從 API 檢索數據所需的一切。
它不斷地向我返回這個錯誤: "Field \\"address\\" of type \\"[Address!]\\" must have a sub selection.",
我相信這是因為我不使用模型(只是一個狂野的猜測)
到目前為止,我的架構如下所示:
type Query {
address(address: String!): [Address!] @field(resolver: "Address@resolve")
}
type Address {
fullAddress: String!
lowestId: Int!
}
和提到的解析器:
public function resolve($rootValue, array $args, GraphQLContext $context, ResolveInfo $resolveInfo): array
{
return array_map(
function ($address): array {
return [
'fullAddress' => $address->getFullAddress()
];
},
$this->service->getAddress($args['address'])
);
}
先感謝您!
該錯誤甚至不是 Lighthouse 特有的,任何 GraphQL 服務器都會為您嘗試執行的操作產生類似的錯誤。 我假設您正在嘗試這樣的查詢:
{
address(address: "foo")
}
考慮GraphQL 中的圖:您的服務器描述可用的數據類型和它們之間的關系,形成一個圖。 每種類型都可以有指向另一種類型的字段,而該類型又可以指向另一種類型,依此類推。 這些引用甚至可以形成循環。 在某些時候,圖可能會結束:標量值等類型標記了圖的葉子。
現在,服務器如何知道您想要查看圖形的哪一部分並且應該解析它? 通過查詢:該圖的一部分的子選擇。 這自然限制了服務器必須運行的深度,它可以做最少的工作來返回您查詢的圖形部分。
查詢規則之一是您必須始終以葉節點結束。 這就是錯誤消息發揮作用的地方:服務器發現Address
不是葉類型,因此要求您指定要遍歷圖形的深度。 一個工作查詢可以是:
{
address(address: "foo") {
fullAddress
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.