如何为每个查询设置 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');
一旦到位,查询方法就会更新每次提交的结果。
总结
我正在 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');
一旦到位,查询方法就会更新每次提交的结果。