У меня есть служба 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
. Какую полезную нагрузку он ожидает?