小编sha*_*ako的帖子

在 Angular 聊天组件中使用 apollos subscribeToMore 方法进行订阅时,出现未处理的 GraphQL 订阅错误

问题描述

我有一个 Angular 聊天组件,它通过 graphql 查询从后端获取消息。在同一查询中,当通过 graphql 突变添加新消息时,我订阅更新。

消息订阅被编码为聊天组件的方法,以便我可以在组件首次呈现时在角度生命周期方法中调用它。

这是根据 apollo 中的文档进行订阅的通常设置: https: //apollo-angular.com/docs/data/subscriptions

当我调用编码了订阅的方法时,出现以下错误:

“无法从另一模块或领域使用 GraphQLSchema“[object GraphQLSchema]”。确保 node_modules 目录中只有一个“graphql”实例。如果不同版本的“graphql”是其他依赖模块的依赖项,请使用“分辨率”,以确保只安装一个版本。https: //yarnpkg.com/en/docs/selective-version-resolutions 不能同时使用重复的“graphql”模块,因为不同版本可能具有不同的功能和行为。函数中使用的一个版本的数据可能会产生令人困惑和虚假的结果。”

我知道错误来自该方法的调用,当我注释掉该调用时,错误就消失了。订阅不会查询后端,因此我知道问题出在客户端。

预期行为

当用户在聊天中发送新消息时,服务器会收到订阅解析器(服务器端)发生消息更新的通知,它将实时将所有消息回传到前端,并且消息应该是通过订阅更多方法返回。

我为解决这个问题所采取的步骤

我尝试查看这个问题: 无法使用重复的“graphql”模块

这让我找到了这个链接: https://github.com/graphql/graphql-js/issues/491

对于使用yarn作为包管理器的人来说,有一个解决方法,但这并不关心我,因为我使用npm。

我认为可能存在重复的 graphql 模块,因此我尝试清理 package.json 文件,删除节点模块并重新安装它们,但这不起作用。

代码示例

聊天组件

import { Component, OnInit } from '@angular/core';
import { Apollo, QueryRef, gql } from 'apollo-angular';

const MESSAGES_SUBSCRIPTION = gql`
   subscription {
     messagesAdded {
      id
      content
      user
    }
  }
`;

const GET_MESSAGES = gql`
   query messages{
     messages {
      id
      content
      user
    }
  } …
Run Code Online (Sandbox Code Playgroud)

javascript graphql graphql-subscriptions angular apollo-angular

5
推荐指数
1
解决办法
1178
查看次数