问题描述
我正在尝试通过订阅从 graphql 服务器向客户端获取数据。为此,我们需要先建立一个 websocket 连接。但是,当我尝试这样做时,我得到以下错误
错误:
WebSocket connection to 'ws://localhost:8888/' failed: Unexpected response code: 400
liveReload — index.js:53
客户端代码:
import { WebSocketLink } from "@apollo/client/link/ws";
const wsLink = new WebSocketLink({
uri: "ws://localhost:8888",options: {
reconnect: false
}
});
我 100% 确定 localhost:8888 是托管 graphql 服务器的地方。我在 safari 和 firefox 中都尝试过
解决方法
您必须在 graphql 服务器声明中明确指定订阅路径,如下所示
const server = new ApolloServer({
typeDefs,resolvers,subscriptions: {
**path: "/subscriptions"**
},context: {
pubsub
}
});