问题标签 [graphql-js]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1222 浏览

nested - graphql - 在突变中使用查询 - 创建嵌套对象

我有一个非常简单的模型,post其中嵌入了几个comments

我想知道我应该如何做一个突变来添加一个新commentpost

由于我已经定义了查询以获取post给定的 a id,因此我想尝试使以下突变语法起作用

但我似乎找不到让它工作的方法。即使我处于突变状态,作为postaddComment 的输出类型也被视为post应具有的字段。

你们有什么想法吗?

谢谢

0 投票
1 回答
156 浏览

graphql - 使用 NODE_DELETE 而不重新获取数据

使用 aNODE_DELETE需要父级,并实际返回连接的父级:

删除时出现中继错误:RelayMutationQuery:胖查询中的字段名称无效

不幸的是,使用它会重新获取我所有的嵌套项目,这对于我的用例来说是完全不可接受的。

有没有办法在不重新获取所有数据的情况下从连接/列表中删除项目?尝试不获取嵌套中的边缘会导致嵌套只是一个空对象。

0 投票
1 回答
236 浏览

graphql - 为重新排序的连接创建乐观响应

在 RelayJS 中“重新排序”连接的最佳方法是什么?

在我的用户界面中,我允许我的用户“交换”两个项目,但是围绕它创建一个突变有点棘手。

我现在正在做的是天真的方式,即使FIELDS_CHANGE用来更改我的节点本身。

它有效,但问题是我似乎无法为它写一个乐观的更新。我只能将一个 id 列表传递给我的 graphql 服务器,但这不适用于乐观更新,因为它需要实际数据。

所以我想我必须模拟我的“连接”界面,但不幸的是,它仍然不起作用。我将重新排序的节点“复制”到 getOptimisticResponse,但它似乎被忽略了。数据与实际的服务器响应相匹配。(简化的 ID)

原来的:

(不做任何事情):乐观的回应:

服务器响应:

是什么赋予了?它是等效的(除了光标),即使我添加了光标,它仍然不起作用。

我究竟做错了什么?还有一种更简单的方法可以模拟我的 id 到连接吗?

另外,顺便说一句,有没有办法零碎地获取这些数据?现在,由于我的突变配置,重新排序两个项目会重新请求整个列表。我想我可以用RANGE_ADD, 和RANGE_DELETE“模拟交换”来做到这一点,但有没有更简单的方法呢?

0 投票
1 回答
5691 浏览

node.js - 如何将请求正文传递到 GraphQL 上下文?

我目前正在尝试将请求正文放入上下文中,因为正文的一部分包含需要解码的 JWT。但是,当我尝试以下操作时,我的上下文未定义:

我注销了 req,但我没有看到里面的 body。我正在使用一个名为react-reach的库,它将以下内容添加到请求的正文中:

我知道正文正在被解释,因为我在正文中的查询/突变正在被解释和执行。只是在传递给上下文时似乎找不到它。

0 投票
5 回答
10587 浏览

graphql - 如何防止对 GraphQL/Apollo 服务器的嵌套攻击?

如何使用以下查询防止对 Apollo 服务器的嵌套攻击:

换句话说,如何限制查询中提交的递归数?这可能是一个潜在的服务器漏洞。

0 投票
1 回答
889 浏览

graphql - GraphQL Relay Mutation Config RANGE_ADD 的 parentName 用于连接

我有一个使用 GraphQL 中继连接的页面,它获取drafts.

在此页面中,我还通过CreateDraftMutation.

在这个突变之后,我希望 Relay 将创建的草稿添加到它的存储中。变异配置的最佳候选者是 RANGE_ADD,记录如下:

https://facebook.github.io/relay/docs/guides-mutations.html

RANGE_ADD 给定一个父节点、一个连接以及响应负载中新创建的边的名称,Relay 会将节点添加到存储中,并根据指定的范围行为将其附加到连接上。

论据

parentName: string 响应中表示连接父级的字段名称

parentID: string 包含连接的父节点的DataID

connectionName: string 响应中表示连接的字段名称

edgeName: string 响应中代表新创建边的字段名称

rangeBehaviors: {[call: string]: GraphQLMutatorConstants.RANGE_OPERATIONS}

按字母顺序打印的、以点分隔的 GraphQL 调用之间的映射,以及我们希望 Relay 在这些调用的影响下将新边添加到连接时表现出的行为。行为可以是“append”、“ignore”、“prepend”、“refetch”或“remove”之一。

文档中的示例如下:

如果父级和派系一样明显,这是小菜一碟,但如果它直接来自查询连接,我一直很难识别 parentName 和 parentID。

我该怎么做呢?

编辑:

这就是查询的导出方式。

作为回报,它在中继容器中使用

0 投票
1 回答
1074 浏览

graphql - 将 GraphQL 速记符号转换为相应的对象?

我正在研究一个 GraphQL 服务器设置,它可以解析从字符串传递给它的类型,我正在寻找一种将字符串转换为适当对象的解决方案。例如,如果传入这里的字符串:

我的函数将返回运行此代码的等效项:

这里的关键是不可知论,所以我也可以传入 say、interface 和其他简写,让它返回适当的对象。我已经从graphql/language模块 bu using graphql_language.parse(str)function 中实现了抽象语法树,但我不确定从这里去哪里。

0 投票
1 回答
1838 浏览

node.js - How to add query logic to graphql-sequelize based setup?

Here is a simple scenario
I want to query GraphQL and fetch all the students that have attended school more then 200 days this year.
I have a Student sequelize model, a matching GraphQL Object, a students Query which accepts the days int as an argument { students(days:200) }
What I'm obviously trying to do is to implement the logic "get all students where school_visits counter is greater than 200" just as an example...
I'm using graphql-sequelize to glue between sequelize and GraphQL.
a simple example query definition looks like this:

as you can notice, this structure doesn't allow me to insert some logic to the query... If you had any experience working with GraphQl and Sequelize - this is a very generic situation... I'd appreciate any help resolving it.
Cheers
Ajar

0 投票
5 回答
39483 浏览

firebase - Firebase 和 GraphQL

有人对 GraphQL 和 Firebase 有任何经验吗?我认为可以将 firebase 调用放在相关字段的解析器中,将一些变量从组件的 props 传递到查询的参数中。

我们如何使用 GraphQL 在 Firebase 中插入新数据?

0 投票
2 回答
509 浏览

relayjs - 继电器连接错误



我在浏览器控制台中收到以下警告:

服务器请求查询App失败,原因如下:

  1. 无法读取未定义的属性“长度”

    _posts40BFVD:posts(first:10) {

    ^^^


这是我得到的唯一信息,没有更多的错误或参考。可能是什么原因?

此代码来自relay-starter-kit,我只将所有Widget代码替换为Post. 一切都与启动器中的几乎相同,因此我认为原因是在数据库代码的某个地方。

但我看不到问题,因为getUserPosts()返回相同的结构:对象数组..


出了什么问题?

getUserPosts()返回了一个承诺(阻塞代码可能是个坏主意)但没有回调。在我看来发生的事情是connectionFromArray()继续执行代码但它还没有数据getUserPosts(),这导致整个系统失败。

一种可能的解决方案

无论如何,我使用 Babel 和 JavaScript “未来功能”,因此我决定使用asyncand await. 但是还是有问题,getUserPosts()返回了一个空数组。

然后我发现,如果await在一个函数中调用async另一个函数,那么另一个函数也必须async如此,否则都会await-s失败。这是我的最终解决方案:

我仍然不确定这是否是最好的方法。我的逻辑告诉我应该在 Node 中尽可能多地使用异步,但我远非 Node 专家。当我了解更多信息时,我会更新这个问题。

我很高兴知道是否有更好甚至推荐的方法来使用 Relay 处理这种数据库查询情况。