问题标签 [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.

0 投票
1 回答
185 浏览

elixir - 对订阅应用过滤器

我试图在订阅中应用过滤器,但在解析器文件中遇到了一些问题。

苦艾分辨率需要作为参数 a {:ok, params} o {:error,params } 所以它可以执行,问题是你发送的所有内容都出现在我的订阅中,我想停止执行所以什么都不会发送到我的订阅

这是我尝试过的

0 投票
1 回答
87 浏览

elixir - 带有宏的动态标识符

我正在使用宏,我想将动态标识符传递给 Absinthe 宏enum,希望enum使用集合列表生成不同的 s。一切都在for理解之中。

我读过这Kernel.apply/3不适用于宏。

  1. 我也试过:

结果得到:

  1. 我也试过不加引号:

并得到:

似乎我无法取消引用我作为宏标识符传递的任何内容enum。是否有可能做到这一点?

0 投票
0 回答
360 浏览

neo4j - 在 DSL 中构造查询时,如何在 Absinthe GraphQL 解析器中处理多个可选参数?

想象一下这样的 GraphQL 查询:

Project还有一个 Neo4j 图,其中包含标记为Platform和的节点Language

当未传递任何可选参数时,解析器应返回图中所有项目的列表,不进行过滤(将来可能会进行分页)。当传递一个或所有参数时,这些参数应该应用于底层查询;即我们应该得到以给定语言或给定平台实现的项目。

我在 Elixir 后端使用 Neo4j 的 Bolt.Sips 驱动程序,并且该驱动程序提供了用于包装 Cypher 查询语言的最小功能,因此在大多数情况下,我需要自己编写查询。到目前为止,我已经实现了解析器,因为我还没有实现第二个参数:

wheregeneric_query!/2get_all_entities_of_type!/1只是 Bolt.Sips 查询执行的包装器。

我的问题是:在这种情况下构建 Cypher 查询的最佳方法是什么?我应该只写一堆在执行前构造查询字符串的函数吗?也许这只是我普遍缺乏 GraphQL 经验,并且像这样的查询模式要以不同的方式构建?任何提示将不胜感激。

0 投票
1 回答
212 浏览

elixir - Ecto 寻找 field_id 而不是 field

我正在尝试使用 GraphQL 设置 Phoenix API。

我的数据库中有一个Team表和一个Game表,如下所示:


这是我的苦艾酒模式中的对象:

假设我想执行一个简单的 GraphQL 查询,如下所示:

我收到以下错误:

如您所见,Ecto 查找home_team_idGame表中的字段被调用home_team

我可以更改什么以便它查找正确的字段名称?

0 投票
2 回答
1504 浏览

reactjs - 使用 `react-apollo-hooks` 和 `useSubscription` 钩子

我正在使用 React、Apollo 和react-apollo-hooks钩子支持构建一个简单的待办事项应用程序,但useSubscription钩子没有触发。

我知道实际的后端工作是有效的,因为我设置了一个 graphiql 应用程序,并且每当我保存待办事项时,该todoCreated事件都会显示在 graphiql 中。我也知道 websocket-setup 工作正常,因为查询和突变正在通过 websocket。顺便说一句,我正在使用 Elixir、Phoenix、Absinthe 作为后端的东西。

这是 Todo-app 组件:

这是根组件:

任何人都知道我似乎做错了什么?

0 投票
1 回答
710 浏览

elixir - 带有 Absinthe 后端的其他正确 GraphQL 查询中的未知参数

我正在运行苦艾酒查询,其中包含三个参数字段,它们都是整数列表。

我还使用 Insomnia 发送查询并使用结果。据我所知,一切都正确编写,类型得到尊重,参数输入正确。

但是我收到以下错误,这没有任何意义。

任何想法为什么?

0 投票
1 回答
76 浏览

elixir - 在没有解析器的情况下创建 GraphQL 字段

我正在将 Elixir 与 Phoenix 和 Absinthe 一起使用来设置 GraphQL 后端。

理想情况下,我希望有一个如下所示的结构:

为此,我认为我需要将posts架构中的字段委托给响应publishedand的对象draft。我这样做是这样的:

这不起作用,而是返回null整个posts字段。但是,如果我更改posts架构中的字段以包含“空白”解析器,它会按预期工作:

这是最佳实践还是有更好的方法来告诉字段完全委托给对象?更一般地说,有没有更好的方法来构建它?

0 投票
2 回答
277 浏览

elixir - 将信息从解析器传递到解析后中间件

我试图将信息从我的解析器函数传递到我的中间件,以便我可以在响应中设置一个 cookie。

用例是我想生成一个 Oauth2 授权链接,它允许客户端与第三方开始 Oauth2 流程。我想生成一个“状态”对象,我可以在响应中将其设置为 cookie。

我试过打电话

在解析器中,但不幸的是,这似乎并没有传递该状态。

这是我的解析器功能的简化示例

然后在我的架构中

我希望能够在此处记录的“absinthe_before_send”方法中设置 cookie:https ://hexdocs.pm/absinthe_plug/Absinthe.Plug.html#module-before-send

这样做的最佳方法是什么?上面的方法对我来说似乎很直观,但在后解析中间件中状态不可用。

0 投票
1 回答
461 浏览

elixir - 处理 Absinthe 中的异常

问题

有很多指南可用于处理中的错误元组,但对于异常情况几乎为零。

这很重要,因为总是有不可预见的问题可能引发异常并返回不符合响应/错误规范的响应。这样的GraphQL 客户端自动批处理请求时,这尤其成问题,并且一个查询中的异常将导致整个 BEAM Web 进程崩溃,从而导致所有查询失败。


现有方法

我的第一个想法是使用中间件将解析器包装在一个try/rescue块中,我遇到的仅有的两个链接也提出了类似的方法:

  • Elixir 论坛: 如何使用 Absinthe.MiddleWare 捕获异常?

    • Absinthe 的创建者之一 Ben Wilson 建议用自定义的中间件替换中间件,该中间件在块Resolution中执行解析器try

    • 这不会处理其他中间件中的异常(但也许应该是这样)

  • 博客文章: 使用中间件处理苦艾酒中的 Elixir 异常

    • 尝试做同样的事情,但不遵循Absinthe.Middleware行为规范
    • 而是将所有现有的中间件包装在匿名函数中
    • 因此,我们在检查启用的中间件及其配置时也会失去洞察力

我的解决方案

我的方法从博客文章中得到了一些启发,但我尝试遵循这种行为并使用中间件元组规范而不是匿名函数:

中间件定义:

在架构中应用它:

在所有查询/变异中间件上调用该wrap/1方法

结果:

这将它们转换为:


问题)

我仍然对我的方法没有完全的信心,因为这感觉有点生硬,并且滥用了苦艾酒的中间件。所以,我有兴趣得到几个问题的答案:

  • 还有哪些其他可能的方法?毕竟使用 Absinthe 中间件是正确的选择吗?
  • 如果是这样,包装所有中间件或仅替换中间件是否有意义Absinthe.Resolution
  • 这样做的规范方法是什么?
0 投票
1 回答
173 浏览

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样子:

正如教程所述,我期待服务器将被执行,但只显示错误消息。

谢谢!