javascript - 如何使用 apollo 服务器中的中间件对 graphql 关系解析器的结果进行解释?
问题描述
我有一个 graphql 类型UserReview
和UserReply
:
type UserReview {
_id
content
}
type UserReply {
_id
reviewId
content
}
我正在使用graphql-compose在评论和回复之间添加关系,以便在查询评论时我还将获得与评论相关的回复列表 -这很有效。现在我想对结果进行一些数据操作。首先,我尝试在 graphql-compose 中添加解析器中间件。但是userReviews
解析器的结果只是一系列没有回复的评论。添加一些console.log
语句后,我注意到填充评论回复字段的关系在评论解析器运行后运行,这是有道理的,因为子解析器首先需要父数据。
但是我仍然需要在结果返回给客户端之前以某种方式拦截结果。所以我想也许我不需要在graphql-compose级别而是在graphql服务器杠杆上拦截它(我正在使用Apollo服务器)。所以我添加了另一种中间件:
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
不包括回复字段。我的问题是如何在返回给客户之前通过回复获得完整的结果?
编辑:formatResponse
我在 Apollo文档中看到了,但是在其中执行数据操作感觉不对,formatResponse
因为我需要导入查询内部数据库的模块formatQuery
。
解决方案
推荐阅读
- android - 添加了库 AAPT:错误:未绑定前缀
- rust - 我应该在哪里添加明确的生命周期限制?
- string - 如何从数据序列/列表中的字符串中删除前导空格?
- python - 如何在pygame的平铺游戏中添加平滑动画
- bootstrap-4 - 如何使用 Bootstrap 4.4.1 设计以下表格
- javascript - 在Javascript中将数字转换为固定数字表示
- google-chrome-extension - 如何使用 chrome.storage 函数获取多个值?
- javascript - JavaScript:在函数中返回未定义的变量
- java - 在 Java 中线程完成后如何显示时间?
- python - Python删除方括号和它们之间的无关信息