Как интерпретировать результат в средстве разрешения отношений graphql с промежуточным ПО на сервере apollo? - PullRequest
1 голос
/ 31 марта 2020

У меня есть тип graphql UserReview и UserReply:

type UserReview {
  _id
  content
}

type UserReply {
  _id
  reviewId
  content
}

Я использую graphql-compose , чтобы добавить связь между отзывами и ответами, чтобы при запрашивая рецензию, я также получу список связанных ответов с рецензией - это работает . Теперь я хочу выполнить некоторые манипуляции с данными о результате. Сначала я попытался добавить промежуточное программное обеспечение для преобразователя в graphql-compose. Но результат userReviews resolver - это просто массив отзывов без ответов. После добавления некоторых операторов console.log я заметил, что отношение, заполняющее поле обзора ответов, запускается после запуска распознавателя отзывов, что имеет смысл, поскольку дочернему распознавателю сначала нужны родительские данные.

Но мне все равно нужно каким-то образом перехватить результат, прежде чем он будет возвращен клиенту. Поэтому я подумал, что, возможно, мне нужно перехватить его не на уровне graphql-compose, а на уровне рычага сервера graphql (я использую сервер Apollo). Поэтому я добавил другой вид middleware :

import { applyMiddleware } from 'graphql-middleware'
import { schemaComposer } from 'graphql-compose'
export { UserReviewTC, UserReplyTC } from './UserReview'

const userReviewsMiddleware = {
  Query: {
    userReviews: async (resolve, parent, args, context, info) => {
      const result = await resolve(parent, args, context, info);
      // the result here still doesn't include replies!
      return result;
    }
  }
};
export const schema = applyMiddleware(
  schemaComposer.buildSchema(),
  userReviewsMiddleware
);

, но результат из userReviewsMiddleware не включает поле ответов. У меня вопрос, как на самом деле получить полный результат с ответами до того, как он будет возвращен клиенту?

РЕДАКТИРОВАТЬ: Я вижу, что в Apollo есть документы *1025* документы , но в formatResponse кажется неправильным выполнять манипуляции с данными, потому что мне нужно импортировать модули, которые запрашивают базу данных внутри formatQuery.

...