Javascript 如何使用apollo server中的中间件在graphql关系解析器上拦截结果?

Javascript 如何使用apollo server中的中间件在graphql关系解析器上拦截结果?,javascript,graphql,apollo-server,graphql-compose,Javascript,Graphql,Apollo Server,Graphql Compose,我有一个graphql类型UserReview和UserReply: type UserReview { _id content } type UserReply { _id reviewId content } 我正在使用添加评论和回复之间的关系,以便在查询评论时,我还将获得与评论相关联的回复列表-这很有效。现在我想对结果执行一些数据操作。首先,我尝试在graphql compose中添加解析器中间件。但是,userReviewsresolver的结果只是一组没有回复的

我有一个graphql类型
UserReview
UserReply

type UserReview {
  _id
  content
}

type UserReply {
  _id
  reviewId
  content
}
我正在使用添加评论和回复之间的关系,以便在查询评论时,我还将获得与评论相关联的回复列表-这很有效。现在我想对结果执行一些数据操作。首先,我尝试在graphql compose中添加解析器中间件。但是,
userReviews
resolver的结果只是一组没有回复的评论。在添加了一些
console.log
语句之后,我注意到填充review的reply字段的关系是在reviews解析器运行之后运行的,这很有意义,因为子解析器首先需要父数据

但在返回给客户端之前,我仍然需要截取结果。所以我想也许我不需要在graphql编写级别截取它,而是在graphql服务器级别截取它(我使用的是Apollo服务器)。因此,我添加了另一种:

但是,
UserReviewMiddleware
的结果仍然不包括回复字段。我的问题是如何在返回给客户机之前获得完整的结果和回复


编辑:我看到Apollo中有
formatResponse
,但在
formatResponse
中执行数据操作感觉不太合适,因为我需要导入模块来查询
formatQuery

中的数据库,您需要什么样的操作。。。可能可以用普通的解析器完成。我使用内置的graphql compose解析器来完成繁重的工作,所以除非没有其他选项,否则我不想编写自己的解析器。您需要什么样的操作。。。可能可以用普通的解析器完成。我使用内置的graphql compose解析器来完成繁重的工作,所以除非没有其他选项,否则我不想编写自己的解析器。
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
);