如何为每个查询设置 Apollo link URI - 初始 uri 保留,我应该使用动态 uri (angular 8)

How to set Apollo link URI per query - initial uri stays, should I use dynamic uri (angular 8)

总结

我正在 Angular 8 中构建一个简单的搜索应用程序,在 elasticsearch 上使用 Apollo 和 graphql 服务器;我将弹性查询传递给 URI 中的后端,然后 graphql 在弹性 returned 数据中查询 运行。但是,URI 是在 Apollo 的第一次创建中设置的,然后在该会话中的后续查询中不会更改。

背景

作为新手 Angular/Apollo 开发人员,我只是想为将来的搜索工具实现初步实现;我已经审查过 graphql-compose-elastic,但它看起来很笨重,至少对于直接的原型需要来说是这样。我尝试将 Apollo 声明移动到子模块,使用 URI 作为全局或通过 localStorage,但客户端不会在查询 1 后重置 URI。我仍然得到结果(没有错误)但它们始终相同来自查询 1 的记录 return。

当前代码

我有一个创建 httpLink 的 graphql.module.ts,目前在 运行 时间它从 localStorage 获取 uri 字符串(包括弹性搜索)参数:

在搜索结果组件中(使用 Form + ag-grid)它设置了 localstorage uricombo 变量:

search.component.ts

uricombo = 'http://graqhql.server.internal:9000/graphql/esindex1/_search?q=title:beginners'

graphql.module.ts

httpLink.create({ uri: localStorage.getItem('uricombo') })

search.component.ts

this.querySubscription = this.apollo.watchQuery<any>({ query: AllBooksQuery, })

...将 returns 数据行添加到农业网格。

这很好,但是当用户提交后续搜索时,将使用原始 uri,并再次记录相同的 return。

存储的 uricombo 值肯定会在每次搜索提交时更新,而 Apollo link 创建方法只有 运行 一次(第一次)。

目前的假设是,一旦创建了 apollo 客户端,它就会保留 URI,但我不确定如何重构它以刷新 URI - 我怀疑动态 URI 会有所帮助,但不太清楚如何实施。

正如我所说的 Angular 和 Apollo 相对较新,(虽然很长时间 Java 骑师)- 我可能在做一些笨拙的事情。非常感谢任何帮助/模式/示例

我能够通过命名 apollo 的实例来解决这个问题,而不是依赖于默认实例:

this.apollo.create({ cache: new InMemoryCache(), link: this.httpLink.create({ uri: localStorage.getItem('uricombo') + localStorage.getItem('searchTerms') }) }, 'name1');

一旦到位,查询方法就会更新每次提交的结果。