@Rinor

Как реализовать рекурсивные обработчики в GraphQL на node.js?

Есть два типа данных, свойства которых ссылаются друг на друга:

type Query {
    posts: [Post]
    user(id: Int!): User
}
type Post {
  id: Int
  message: String
  author: User
}
type User {
  id: Int
  name: String
  posts: [Post]
}


Как должны выглядеть обработчики что бы следующий запрос правильно отрабатывал?

{
  posts {
    id
    message
    author {
      id
      name
      posts {
        id
        message
        author {
          id
          name
        }
      }
    }
  }
}


Сейчас есть следующая реализация, но user.posts всегда пуст и следовательно запрос выполняется неверно.

const posts = [{ id: 0, message: 'foo', author: 0 }]
const users = [{ id: 0, name: 'bar', posts: [0] }]
const rootValue = {
    posts: () => {
        return posts
            .map(post => ({
                id: post.id,
                message: post.message,
                author: rootValue.user({ id: post.author })
            }))
    },
    user: ({ id }) =>
        users
            .filter(user => user.id === id)
            .map(user => ({ id: user.id, name: user.name, posts: [] }))[0]
}
  • Вопрос задан
  • 173 просмотра
Решения вопроса 1
Negezor
@Negezor
Senior Shaurma Developer
const posts = [{ id: 0, message: 'foo', author: 0 }]
const users = [{ id: 0, name: 'bar', posts: [0] }]

const resolvers = {
    User: {
        posts({ id }) {
            return posts.filter(post => (
                post.author === id
            ))
        }
    },
    Post: {
        author({ author }) {
            return users.find(user => (
                user.id === author
            ))
        }
    },

    posts() {
        return posts;
    },

    users() {
        return users;
    }
};
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы