シンプルな「wiki」アプリで Lacinia を使用して、Clojure で GraphQL を理解しようとしています。
アプリ。カードのシーケンスであるページがあります。また、API は、ページの生のテキスト バージョン、または Card オブジェクトのシーケンスのいずれかを返すことができます。
これがEDNで定義された私のスキーマです
{:enums
{:cardtype
{:description "A type that is attached to each card"
:values [:RAW :MARKDOWN :CALCULATED]}}
:objects
{:Card
{:description "A card within the system"
:fields
{}}
:RawPage
{:description "A page always has a representation whose body is nothing but a string of plaintext"
:fields
{:page_name {:type String}
:body {:type String}}}
:Page
{:description "A Page is a named page within the wiki. It is made of a series of cards"
:fields
{:page_name {:type String}
:cards {:type (list :Card)}} }}
:queries
{:raw_page
{:type :RawPage
:description "Retrieve the raw version of a single page by its name"
:args {:page_name {:type (non-null String)}}
:resolve :resolve-raw-page}
:cooked_page
{:type :Page
:description "Retrieve the cooked version of a single page by its name"
:args {:page_name {:type (non-null String)}}
:resolve :resolve-cooked-page}
}
}
そして、このクエリをGraphiQLから起動してテストしようとしています
{
raw_page(page_name: "HelloWorld")
page_name
body
}
ハンドラーは
(defn graphql-handler [request]
{:status 200
:headers {"Content-Type" "application/json"}
:body (let [query (extract-query request)
result (execute pagestore/pagestore-schema query nil nil)]
(json/write-str result))})
そして、私が求めている raw_page クエリのリゾルバーは次のとおりです。
(defn resolve-raw-page [context arguments value]
(let [{:keys [page_name]} arguments]
{:page_name page_name
:body (get-page-from-file page_name)}))
そして、私はこのエラーメッセージを受け取っています:
{
"errors": [
{
"message": "Cannot query field `page_name' on type `QueryRoot'.",
"locations": [
{
"line": 3,
"column": 5
}
],
"extensions": {
"type": "QueryRoot",
"field": "page_name"
}
}
]
}
これはおそらく非常に単純な n00b の間違いです。スキーマまたはクエリのいずれかを使用します。しかし、何が悪いのかわかりません。
QueryRoot はクエリのルートだと思います。しかし、これはどこかから明示的に下に移動しなければならないものですか?