簡體   English   中英

Lighthouse graphql 自定義解析器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM