У меня есть тип 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
.