Почему я получаю сообщение об ошибке «Сервер не отправил подпротокол» в ApolloClient при подключении к шлюзу API через веб-сокет - PullRequest
0 голосов
/ 26 мая 2020

У меня есть служба graphql, развернутая в AWS лямбда. Я использую здесь метод: https://www.apollographql.com/docs/apollo-server/deployment/lambda/ Он отлично работает для шлюза HTTP API.

Но я не могу подключиться к шлюзу API, если использую соединение через веб-сокет. Я настроил шлюз API для использования веб-сокета. Затем подключите маршрут $connect к лямбда-функции, которая просто отвечает на код состояния 200, как показано ниже.

exports.handler = async (event, context) => {
    // TODO implement
    console.log('receive connected ', event)
    console.log('context:', context);
    const response = {
        statusCode: 200,
        body: JSON.stringify({message:" ok"}),
    };
    return response;
};

И я настроил $default маршрут к лямбда-функции graphql.

ниже: мой клиентский код graphql:

const getWSClient = (uri: string) => {
  const client = new SubscriptionClient(
    uri,
    {
      reconnect: true,
    },
    ws,
  );
  client.onConnected((data: any): any => console.log('connected ', data));
  client.onError((data: any): any => console.log('connect error', data));
  client.onDisconnected((data: any): any => console.log('disconnect ', data));
  client.onReconnecting((data: any): any => console.log('reconnect', data));
  client.onReconnecting((data: any): any => console.log('reconnected', data));

  const link = new WebSocketLink(client);
  return new ApolloClient({
    link: link,
    cache: new InMemoryCache(),
  });
};

const client = getWSClient(WS_URI);

  client
    .query({
      query: gql`
        query {
          transaction(transactionId: "123") {
            stan
          }
        }
      `,
    })

, когда я запускаю приведенный выше код со стороны клиента, я получаю эту ошибку:

target: WebSocket, type: "error", message: "Server sent no subprotocol", error: Error: Server sent no subprotocol

Из журнала подключения лямбда я вижу это запускается правильно, и я могу видеть полезную нагрузку события подключения.

Ошибка кода на этапе подключения в клиенте Apollo, и лямбда-запрос запроса даже не запускается. Я не знаю, как мне ответить клиенту graphql в лямбде $connect. Какую полезную нагрузку он ожидает?

...