GQL не возвращает результаты - PullRequest
0 голосов
/ 24 января 2019

Я практикую GQL, у меня проблема при отображении данных в Playground.

Я пытаюсь нажать на API jsonplaceholder, чтобы получить все сообщения и отобразить их, но выдает следующую ошибку.

error: GRAPHQL_FORMAT_ERROR: Expected Iterable, but did not find one for field Query.allPosts.

Запрос:

{
  allPosts {
    id
  }
}

Ответ

{
      "errors": [
        {
          "extensions": {
            "code": "400"
          }
        }
      ],
      "data": {
        "allPosts": null
      }
    }

Ниже моя схема Posts.graphql

#Description of Post

type Post {
  userId: Int
  id: Int
  title: String
  body: String
}

query.graphql

type Query {
  dangerousGoods: DangerousGoodsCIO
  allCourses: [Course]
  course(id: Int!): Course
  allPosts: [Post]
}

query.ts

export const Query: QueryResolvers.Resolvers = {
  async allPosts(_, _args, { injector }: ModuleContext) {
    const response = await injector.get(Api).getAllPosts();

    return response.body;
  }
};

api.ts

 getAllPosts() {
    const config = {
      uri: `https://jsonplaceholder.typicode.com/posts`,
      method: 'GET'
    };
    return this.request({ config, log: 'getAllPosts' })
    .then(response => {
      const allPost = response.json();
      return allPost;
    });
  }

Примечание: Я смогу увидеть результаты, если посмеюсь над ответом, как показано ниже.

Так что, если я жестко закодирую почтовые данные, тогдаэто работает, как и ожидалось, но не работает, когда я нажал от API.

Пожалуйста, скажите мне, что я здесь не так делаю.

public postsData = [...]

  getAllPosts () {
    return this.postsData;
  }

1 Ответ

0 голосов
/ 27 января 2019

Даниэль Рарден прав в упоминании об использовании библиотеки извлечения.Вам нужно просто более внимательно взглянуть на документы: https://developer.mozilla.org/en-US/docs/Web/API/Body/json

json() метод возвращает Promise в JSON, а не в сам JSON, поэтому вам просто нужно сначала разрешить его.

Кроме того, поскольку вы используете async / await в query.ts, возможно, стоит придерживаться того же подхода при работе с Promises и переписать свои api.ts

async getAllPosts() {
    const config = {
      uri: `https://jsonplaceholder.typicode.com/posts`,
      method: 'GET'
    };
    const response = await this.request({ config, log: 'getAllPosts' })
    const allPost = await response.json();
    return allPost;
  }
...