我正在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骑师很长一段时间)-我可能做得有些愚蠢。任何帮助/模式/示例都非常感谢
答案 0 :(得分:0)
我仅通过命名apollo实例即可解决此问题,而不必依赖默认实例:
this.apollo.create({
cache: new InMemoryCache(),
link: this.httpLink.create({ uri: localStorage.getItem('uricombo') + localStorage.getItem('searchTerms') })
}, 'name1');
查询方法一旦到位,每次提交都会更新结果。