问题标签 [absinthe]
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.
elixir - 对订阅应用过滤器
我试图在订阅中应用过滤器,但在解析器文件中遇到了一些问题。
苦艾分辨率需要作为参数 a {:ok, params} o {:error,params } 所以它可以执行,问题是你发送的所有内容都出现在我的订阅中,我想停止执行所以什么都不会发送到我的订阅
这是我尝试过的
elixir - 带有宏的动态标识符
我正在使用宏,我想将动态标识符传递给 Absinthe 宏enum
,希望enum
使用集合列表生成不同的 s。一切都在for
理解之中。
我读过这Kernel.apply/3
不适用于宏。
- 我也试过:
结果得到:
- 我也试过不加引号:
并得到:
似乎我无法取消引用我作为宏标识符传递的任何内容enum
。是否有可能做到这一点?
neo4j - 在 DSL 中构造查询时,如何在 Absinthe GraphQL 解析器中处理多个可选参数?
想象一下这样的 GraphQL 查询:
Project
还有一个 Neo4j 图,其中包含标记为Platform
和的节点Language
。
当未传递任何可选参数时,解析器应返回图中所有项目的列表,不进行过滤(将来可能会进行分页)。当传递一个或所有参数时,这些参数应该应用于底层查询;即我们应该得到以给定语言或给定平台实现的项目。
我在 Elixir 后端使用 Neo4j 的 Bolt.Sips 驱动程序,并且该驱动程序提供了用于包装 Cypher 查询语言的最小功能,因此在大多数情况下,我需要自己编写查询。到目前为止,我已经实现了解析器,因为我还没有实现第二个参数:
wheregeneric_query!/2
和get_all_entities_of_type!/1
只是 Bolt.Sips 查询执行的包装器。
我的问题是:在这种情况下构建 Cypher 查询的最佳方法是什么?我应该只写一堆在执行前构造查询字符串的函数吗?也许这只是我普遍缺乏 GraphQL 经验,并且像这样的查询模式要以不同的方式构建?任何提示将不胜感激。
elixir - Ecto 寻找 field_id 而不是 field
我正在尝试使用 GraphQL 设置 Phoenix API。
我的数据库中有一个Team
表和一个Game
表,如下所示:
这是我的苦艾酒模式中的对象:
假设我想执行一个简单的 GraphQL 查询,如下所示:
我收到以下错误:
如您所见,Ecto 查找home_team_id
而Game
表中的字段被调用home_team
。
我可以更改什么以便它查找正确的字段名称?
reactjs - 使用 `react-apollo-hooks` 和 `useSubscription` 钩子
我正在使用 React、Apollo 和react-apollo-hooks
钩子支持构建一个简单的待办事项应用程序,但useSubscription
钩子没有触发。
我知道实际的后端工作是有效的,因为我设置了一个 graphiql 应用程序,并且每当我保存待办事项时,该todoCreated
事件都会显示在 graphiql 中。我也知道 websocket-setup 工作正常,因为查询和突变正在通过 websocket。顺便说一句,我正在使用 Elixir、Phoenix、Absinthe 作为后端的东西。
这是 Todo-app 组件:
这是根组件:
任何人都知道我似乎做错了什么?
elixir - 带有 Absinthe 后端的其他正确 GraphQL 查询中的未知参数
我正在运行苦艾酒查询,其中包含三个参数字段,它们都是整数列表。
我还使用 Insomnia 发送查询并使用结果。据我所知,一切都正确编写,类型得到尊重,参数输入正确。
但是我收到以下错误,这没有任何意义。
任何想法为什么?
elixir - 在没有解析器的情况下创建 GraphQL 字段
我正在将 Elixir 与 Phoenix 和 Absinthe 一起使用来设置 GraphQL 后端。
理想情况下,我希望有一个如下所示的结构:
为此,我认为我需要将posts
架构中的字段委托给响应published
and的对象draft
。我这样做是这样的:
这不起作用,而是返回null
整个posts
字段。但是,如果我更改posts
架构中的字段以包含“空白”解析器,它会按预期工作:
这是最佳实践还是有更好的方法来告诉字段完全委托给对象?更一般地说,有没有更好的方法来构建它?
elixir - 将信息从解析器传递到解析后中间件
我试图将信息从我的解析器函数传递到我的中间件,以便我可以在响应中设置一个 cookie。
用例是我想生成一个 Oauth2 授权链接,它允许客户端与第三方开始 Oauth2 流程。我想生成一个“状态”对象,我可以在响应中将其设置为 cookie。
我试过打电话
在解析器中,但不幸的是,这似乎并没有传递该状态。
这是我的解析器功能的简化示例
然后在我的架构中
我希望能够在此处记录的“absinthe_before_send”方法中设置 cookie:https ://hexdocs.pm/absinthe_plug/Absinthe.Plug.html#module-before-send
这样做的最佳方法是什么?上面的方法对我来说似乎很直观,但在后解析中间件中状态不可用。
elixir - 处理 Absinthe 中的异常
问题
有很多指南可用于处理苦艾酒中的错误元组,但对于异常情况几乎为零。
这很重要,因为总是有不可预见的问题可能引发异常并返回不符合graphql响应/错误规范的响应。当像apollo这样的GraphQL 客户端自动批处理请求时,这尤其成问题,并且一个查询中的异常将导致整个 BEAM Web 进程崩溃,从而导致所有查询失败。
现有方法
我的第一个想法是使用中间件将解析器包装在一个try/rescue
块中,我遇到的仅有的两个链接也提出了类似的方法:
Elixir 论坛: 如何使用 Absinthe.MiddleWare 捕获异常?
Absinthe 的创建者之一 Ben Wilson 建议用自定义的中间件替换中间件,该中间件在块
Resolution
中执行解析器try
这不会处理其他中间件中的异常(但也许应该是这样)
博客文章: 使用中间件处理苦艾酒中的 Elixir 异常
- 尝试做同样的事情,但不遵循
Absinthe.Middleware
行为规范 - 而是将所有现有的中间件包装在匿名函数中
- 因此,我们在检查启用的中间件及其配置时也会失去洞察力
- 尝试做同样的事情,但不遵循
我的解决方案
我的方法从博客文章中得到了一些启发,但我尝试遵循这种行为并使用中间件元组规范而不是匿名函数:
中间件定义:
在架构中应用它:
在所有查询/变异中间件上调用该wrap/1
方法
结果:
这将它们转换为:
问题)
我仍然对我的方法没有完全的信心,因为这感觉有点生硬,并且滥用了苦艾酒的中间件。所以,我有兴趣得到几个问题的答案:
- 还有哪些其他可能的方法?毕竟使用 Absinthe 中间件是正确的选择吗?
- 如果是这样,包装所有中间件或仅替换中间件是否有意义
Absinthe.Resolution
? - 这样做的规范方法是什么?
graphql - 为什么我会收到与 Absinthe 教程的 schema.ex 相关的 CompileError?
我正在使用 howtographql.com 网站为 Elixir 做苦艾酒教程。在某些时候(https://www.howtographql.com/graphql-elixir/2-queries/),在运行 graphql 服务器的最后一步时,出现错误。
执行的命令:
$ iex -S mix phx.server
输出:
这就是我的lib/community_web/schema.ex
样子:
这就是我的lib/community_web/resolvers/news_resolver.ex
样子:
正如教程所述,我期待服务器将被执行,但只显示错误消息。
谢谢!