【问题标题】:Subscription not triggering with Apollo-client in nodejs/vanillanodejs/vanilla 中的 Apollo-client 未触发订阅
【发布时间】:2019-10-17 20:14:15
【问题描述】:

我正在使用 Apollo graphql 框架,似乎可以启动并运行订阅。但是我无法从订阅中触发任何事件,而且围绕 Apollo 客户端的文档很少涉及纯 nodejs 和 vanilla javascript。

该项目正在为 node-red 制作几个节点,它将使用供应商的 graphql 接口来获取有关电力消耗和电价的不同数据。为此,我还需要使用订阅。对 graphql 很陌生,被推荐使用 apollo 框架。

result = tibber.getSubscription('subscription{ liveMeasurement(homeId:"c70dcbe5-4485-4821-933d-a8a86452737b"){timestamp power maxPower accumulatedConsumption accumulatedCost}}');
// returns an Observable from the apollo client subscribe()
// client.subscribe({ query: gql`${query}` });

let sub = result.subscribe({
    next (data) { console.log(data); },
    error (err) { console.log(err); }
  });

本以为 console.log 会在几秒钟后触发一些数据,因为此订阅适用于供应商 api explorer 上的演示帐户。 没有返回错误,订阅对象(子)处于“就绪”状态。

【问题讨论】:

  • subsription 会将更改从服务器“传递”到客户端,好吧,假设它可以工作(完成了一半)......但是什么会通知服务器某事发生了变化?缓存/轮询/发布订阅... fetch 是一次性事件,订阅需要蜜蜂'喂'
  • 不确定我明白了...这是服务器上定义的订阅,因此设置为在更改和/或间隔(不是我的服务器)时中继信息。我有一个 websocket 链接,然后应该保持打开状态,并观察查询的变化(网络或缓存)。你的意思是我还需要 apollo 客户端来使它工作吗?
  • 更多的是关于阿波罗服务器 - 你有什么触发/发送事件到这个(可能工作的)订阅(c-s)“频道”吗?
  • 不是我的服务器,一个叫 Tibber 的供应商。但是,是的,它是他们架构中的有效订阅,使用他们的 API 资源管理器(数据正在定期流动)和我用于从我的客户进行测试的相同演示帐户令牌进行验证。

标签: node.js graphql node-red apollo-client


【解决方案1】:

我的建议:分而治之

我将从带有 apollo 客户端的标准反应应用程序开始。为简单起见,您可以使用 <Query/> 组件。这一步最重要的是熟悉authentication

下一步:直接使用客户端,不使用组件。仍在使用 react 使用 ApolloConsumer - 您的组件可以访问 client 道具。您可以使用从componentDidMount()console.logsetState)调用的client.query()

如果你更喜欢香草this tutorial可以更合适。

下一步将使用subscriptions。同样,从 <Subscription/> 组件开始。之后,您应该已经正确配置了客户端(传输、身份验证)。

在这一步,您将开始移动到节点 env,f.e.寻找像this 这样的例子并结合之前获得的知识。

【讨论】:

    猜你喜欢
    • 2018-06-09
    • 2020-06-23
    • 2017-03-30
    • 2018-09-30
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 2019-09-18
    • 2021-04-24
    相关资源
    最近更新 更多