GQL не возвращает результаты
Я практикую 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 ответ
Даниэль Реарден прав насчет упоминания об использовании библиотеки извлечения. Вам нужно просто более внимательно взглянуть на документы: https://developer.mozilla.org/en-US/docs/Web/API/Body/json
json()
Метод возвращает Promise в JSON, а не в сам JSON, поэтому сначала нужно разрешить его.
Кроме того, поскольку вы используете async / await в query.ts
возможно, стоит придерживаться того же подхода к работе с Обещаниями и переписать свой 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;
}