首页 > 解决方案 > nodejs/vanilla 中的 Apollo-client 未触发订阅

问题描述

我正在使用 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资源管理器上的演示帐户一起使用。没有返回错误并且订阅对象(子)处于“就绪”状态。

标签: node.jsgraphqlnode-redapollo-client

解决方案


我的建议:分而治之

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

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

如果您更喜欢香草,本教程可能更合适。

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

在这一步,你开始转向 node env,fe 寻找这样的例子结合之前获得的知识。


推荐阅读