reactjs - GraphQL:接受缺少请求字段的查询响应?
问题描述
我有一个 Apollo GraphQL 查询来从我的后端获取电影,如果检测到具有打开会话的用户(身份验证 cookie),后端有条件地向响应中添加额外的字段。
问题是前端使用相同的查询是否用户登录,并且总是请求一个用户相关的字段,指示电影是否在用户的集合中,即使没有用户登录也会这样做,如决定权的是后端。
当然,当没有用户登录并且前端请求该字段时,后端决定不发送它并且只发送公共字段(标题,流派......)并且请求以错误结束。我有两种解决方案,但我都不喜欢:
Add a variable to the query with @include
,指示用户是否登录以有条件地获取该字段。我不喜欢它,因为它看起来是多余的,因为后端已经通过在上下文中查找活动会话来自动检查它(请求中包含一个 cookie)。如果我可以在前端查询中添加变量,这个解决方案就可以了。Make the backend always send the field
,即使没有用户登录,在这种情况下,它也会将其发送为空或假。我不喜欢它,因为它是不必要的流量,特别是考虑到我计划添加许多其他用户特定字段(评级等),并且我希望许多用户在未经身份验证的情况下使用该应用程序。
TLDR
所以我的问题是:
有没有办法在 GraphQL 查询中请求一个字段并接受响应,即使它根本不包含该字段(甚至未定义),同时仍需要其他字段?仅使用一个查询来解决此问题的最佳方法是什么?
我试图用一个查询来做到这一点,以避免在我的前端链接查询。
解决方案
如果我理解正确,我认为您可以为依赖于用户的字段创建解析器。
我不确切知道架构,但它看起来像:
type Movie {
title: String
...more fields here
userSpecificInformation: UserSpecificInformation
}
然后为 UserSpecificInformation 定义解析器。
有关更多信息,请查看https://graphql.org/learn/execution/
推荐阅读
- actionscript-3 - 如何通过 AS3 中的循环在数组中添加数字?
- django - 在geodjango中按多边形绘制过滤
- sql - SQL 如何求和 SELECT
- firefox - 如何删除 Firefox 中的 X 按钮?
- python - 移除 OpenCV 图像大小限制
- python - 将 tf.keras.utils.get_file() 用于谷歌驱动器
- uwp - uwp 中的无铬窗口
- python - Python 使用 re.search 排除注释
- c++ - (a=1)=2 在 C++98 中是未定义的行为吗?
- shell - 如何制作一个批处理脚本来创建指定数量的具有随机名称和指定扩展名的文件?