概括
我正在Angular 8中构建一个简单的搜索应用程序,使用Apollo和一个graphql服务器而不是elasticsearch;我将弹性查询传递到 URI 中的后端,然后 graphql 查询在弹性返回的数据中运行。但是,URI 是在 Apollo 的第一次创建中设置的,然后对于该会话中的后续查询不会更改。
背景
作为一个新手 Angular/Apollo 开发人员,我只是想为未来的搜索工具实现初始实现;我已经查看了 graphql-compose-elastic 但它看起来很笨拙,至少对于直接的原型需求来说是这样。我尝试将 Apollo 声明移动到子模块,使用 URI 作为全局或通过 localStorage,但客户端不会在查询 1 后重置 URI。我仍然得到结果(没有错误)但它们总是相同的从查询 1 返回的记录。
当前代码
我有一个创建 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, })
...将数据行返回到 ag-grid。
这很好,但是当用户提交后续搜索时,将使用原始 uri,并且再次返回相同的记录。
每次搜索提交时,存储的uricombo
值肯定会更新,而 Apollo 链接创建方法只运行一次(第一次)。
当前的假设是,一旦创建了 apollo 客户端,它就会保留 URI,但我不确定如何重构它以刷新 URI - 我怀疑动态 URI 会有所帮助,但不太清楚如何实现。
正如我所说的对 Angular 和 Apollo 来说都比较新,(虽然是长期的 Java 骑师)——我可能正在做一些无聊的事情。非常感谢任何帮助/模式/示例