1

我正在将 URQL 客户端与 Apollo 服务器一起使用,现在我正在尝试处理 URQL 客户端上的订阅,但我似乎无法使 Web 套接字工作。希望有人可以帮助我谢谢。我认为客户端存在问题,而不是服务器和客户端之间的通信。

以下是我在客户端中添加的代码:

import { SubscriptionClient } from "subscriptions-transport-ws";

const subscriptionClient = new SubscriptionClient(
  "ws://localhost:4000/subscriptions",
  {
    reconnect: true,
  }
);

const CreateUrqlClient = (ssrExchange: any, ctx: any) => {
  let cookie = "";
  if (isServer()) {
    cookie = ctx?.req?.headers.cookie;
  }
  return {
    url: process.env.NEXT_PUBLIC_API_URL,
    fetchOptions: {
      credentials: "include" as const,
      headers: cookie
        ? {
            cookie,
          }
        : undefined,
    },
    exchanges: [
      dedupExchange,
      subscriptionExchange({
        forwardSubscription: (operation) =>
          subscriptionClient.request(operation),
      }),
      cacheExchange,
      errorExchange,
      ssrExchange,
      fetchExchange,
    ],
  };
};
export default CreateUrqlClient;

我遇到了下面的错误(服务器错误错误:无法找到本机实现,或 WebSocket 的替代实现!)。因此,我也尝试添加 ws(在浏览器上不起作用)和 WebSocket 本身(不确定如何正确使用),但我仍然无法使其工作。

错误信息

4

1 回答 1

1

尝试

const subscriptionClient =process.browser ? new SubscriptionClient('ws://localhost:4000/subscriptions', { reconnect: true }) as any : null;

这让它为我工作。

于 2021-10-04T10:21:14.567 回答