问题标签 [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.
nested - graphql - 在突变中使用查询 - 创建嵌套对象
我有一个非常简单的模型,post
其中嵌入了几个comments
我想知道我应该如何做一个突变来添加一个新comment
的post
由于我已经定义了查询以获取post
给定的 a id
,因此我想尝试使以下突变语法起作用
但我似乎找不到让它工作的方法。即使我处于突变状态,作为post
addComment 的输出类型也被视为post
应具有的字段。
你们有什么想法吗?
谢谢
graphql - 使用 NODE_DELETE 而不重新获取数据
使用 aNODE_DELETE
需要父级,并实际返回连接的父级:
删除时出现中继错误:RelayMutationQuery:胖查询中的字段名称无效
不幸的是,使用它会重新获取我所有的嵌套项目,这对于我的用例来说是完全不可接受的。
有没有办法在不重新获取所有数据的情况下从连接/列表中删除项目?尝试不获取嵌套中的边缘会导致嵌套只是一个空对象。
graphql - 为重新排序的连接创建乐观响应
在 RelayJS 中“重新排序”连接的最佳方法是什么?
在我的用户界面中,我允许我的用户“交换”两个项目,但是围绕它创建一个突变有点棘手。
我现在正在做的是天真的方式,即使FIELDS_CHANGE
用来更改我的节点本身。
它有效,但问题是我似乎无法为它写一个乐观的更新。我只能将一个 id 列表传递给我的 graphql 服务器,但这不适用于乐观更新,因为它需要实际数据。
所以我想我必须模拟我的“连接”界面,但不幸的是,它仍然不起作用。我将重新排序的节点“复制”到 getOptimisticResponse,但它似乎被忽略了。数据与实际的服务器响应相匹配。(简化的 ID)
原来的:
(不做任何事情):乐观的回应:
服务器响应:
是什么赋予了?它是等效的(除了光标),即使我添加了光标,它仍然不起作用。
我究竟做错了什么?还有一种更简单的方法可以模拟我的 id 到连接吗?
另外,顺便说一句,有没有办法零碎地获取这些数据?现在,由于我的突变配置,重新排序两个项目会重新请求整个列表。我想我可以用RANGE_ADD
, 和RANGE_DELETE
“模拟交换”来做到这一点,但有没有更简单的方法呢?
node.js - 如何将请求正文传递到 GraphQL 上下文?
我目前正在尝试将请求正文放入上下文中,因为正文的一部分包含需要解码的 JWT。但是,当我尝试以下操作时,我的上下文未定义:
我注销了 req,但我没有看到里面的 body。我正在使用一个名为react-reach的库,它将以下内容添加到请求的正文中:
我知道正文正在被解释,因为我在正文中的查询/突变正在被解释和执行。只是在传递给上下文时似乎找不到它。
graphql - 如何防止对 GraphQL/Apollo 服务器的嵌套攻击?
如何使用以下查询防止对 Apollo 服务器的嵌套攻击:
换句话说,如何限制查询中提交的递归数?这可能是一个潜在的服务器漏洞。
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。
我该怎么做呢?
编辑:
这就是查询的导出方式。
作为回报,它在中继容器中使用
graphql - 将 GraphQL 速记符号转换为相应的对象?
我正在研究一个 GraphQL 服务器设置,它可以解析从字符串传递给它的类型,我正在寻找一种将字符串转换为适当对象的解决方案。例如,如果传入这里的字符串:
我的函数将返回运行此代码的等效项:
这里的关键是不可知论,所以我也可以传入 say、interface 和其他简写,让它返回适当的对象。我已经从graphql/language
模块 bu using graphql_language.parse(str)
function 中实现了抽象语法树,但我不确定从这里去哪里。
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
firebase - Firebase 和 GraphQL
有人对 GraphQL 和 Firebase 有任何经验吗?我认为可以将 firebase 调用放在相关字段的解析器中,将一些变量从组件的 props 传递到查询的参数中。
我们如何使用 GraphQL 在 Firebase 中插入新数据?
relayjs - 继电器连接错误
我在浏览器控制台中收到以下警告:
服务器请求查询
App
失败,原因如下:
无法读取未定义的属性“长度”
_posts40BFVD:posts(first:10) {
^^^
这是我得到的唯一信息,没有更多的错误或参考。可能是什么原因?
此代码来自relay-starter-kit,我只将所有Widget
代码替换为Post
. 一切都与启动器中的几乎相同,因此我认为原因是在数据库代码的某个地方。
但我看不到问题,因为getUserPosts()
返回相同的结构:对象数组..
出了什么问题?
getUserPosts()
返回了一个承诺(阻塞代码可能是个坏主意)但没有回调。在我看来发生的事情是connectionFromArray()
继续执行代码但它还没有数据getUserPosts()
,这导致整个系统失败。
一种可能的解决方案
无论如何,我使用 Babel 和 JavaScript “未来功能”,因此我决定使用async
and await
. 但是还是有问题,getUserPosts()
返回了一个空数组。
然后我发现,如果await
在一个函数中调用async
另一个函数,那么另一个函数也必须async
如此,否则都会await-s
失败。这是我的最终解决方案:
我仍然不确定这是否是最好的方法。我的逻辑告诉我应该在 Node 中尽可能多地使用异步,但我远非 Node 专家。当我了解更多信息时,我会更新这个问题。
我很高兴知道是否有更好甚至推荐的方法来使用 Relay 处理这种数据库查询情况。