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

时间:2019-08-21 22:01:56

标签: elasticsearch graphql apollo-client angular8 apollo-link

摘要

我正在Angular 8中构建一个简单的搜索应用程序,在Elasticsearch上使用带有graphql服务器的Apollo;我将弹性查询传递到URI中的后端,然后graphql查询在弹性返回的数据内运行。但是,该URI是在Apollo的首次创建中设置的,因此在该会话中的后续查询中不会更改。

背景

作为Angular / Apollo的新手,我只是想为将来的搜索工具实现开始的实现;我已经检查了graphql-compose-elastic,但是它看起来很笨拙,至少对于立即的原型需求而言。我尝试将Apollo声明使用URI作为Global或通过localStorage移至子模块,但是客户端在查询1之后不会重置URI。我仍然会得到结果(无错误),但它们始终是相同的查询1返回的记录。

当前代码

我有一个graphql.module.ts创建了httpLink,当前它在运行时从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, })

...将数据行返回到ag-grid。

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

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

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

正如我对Angular和Apollo来说相对较新,(尽管Java骑师很长一段时间)-我可能做得有些愚蠢。任何帮助/模式/示例都非常感谢

1 个答案:

答案 0 :(得分:0)

我仅通过命名apollo实例即可解决此问题,而不必依赖默认实例:

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

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