Невозможно запросить поле `XXX 'для типа` Query Root'. "(Библиотека Lacinia Clojure для GraphQL) - PullRequest
0 голосов
/ 29 февраля 2020

Я просто пытаюсь понять GraphQL в Clojure, используя Lacinia с простым приложением "вики".

Приложение. имеет страницы, которые являются последовательностями карт. И 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. Либо со схемой, либо с моим запросом. Но я не вижу, что не так.

Я так понимаю, Запрос Root - это root запроса. Но это то, что я должен явно перейти откуда-то вниз?

1 Ответ

0 голосов
/ 29 февраля 2020

ОК.

После нескольких часов стука в голову, я наконец понял это.

Это была пропущенная пара фигурных скобок после аргумента запроса и вокруг полей.

Запрос должен был быть:

  {
    raw_page(page_name: "HelloWorld") {
      page_name
      body
    }
  }
...