アポロのドキュメントに従ってサーバーを設定しているようです(http://dev.apollodata.com/tools/apollo-server/setup.html)。自分のサーバー/ main.jsファイルで:subscriptions-transport-wsを使用してApolloサーバを設定しますか?
//SET UP APOLLO INCLUDING APOLLO PUBSUB
const executableSchema = makeExecutableSchema({
typeDefs: Schema,
resolvers: Resolvers,
connectors: Connectors,
logger: console,
});
const GRAPHQL_PORT = 8080;
const graphQLServer = express();
// `context` must be an object and can't be undefined when using connectors
graphQLServer.use('/graphql', bodyParser.json(), apolloExpress({
schema: executableSchema,
context: {}, //at least(!) an empty object
}));
graphQLServer.use('/graphiql', graphiqlExpress({
endpointURL: '/graphql',
}));
graphQLServer.listen(GRAPHQL_PORT,() => console.log(
`GraphQL Server is now running on http://localhost:${GRAPHQL_PORT}/graphql`
));
//SET UP APOLLO INCLUDING APOLLO PUBSUB
これは、サーバーが正常に初期化されたことを示す端末のログに「GraphQL Serverは今http://localhost:8080/graphql上で実行されている」出力します。
しかし、私のmain_layoutコンポーネントの上部に、私はこのコードを実行すると:// localhostを:「WSへ
のWebSocket接続:
import { Client } from 'subscriptions-transport-ws'; const wsClient = new Client('ws://localhost:8080');
を...私はこのコンソールメッセージが表示されます:8080/'失敗:ハンドシェイク応答を受信する前に接続が閉じられました
何が欠けていますか?
あなたはGitHunt-API/API/index.jsで強調表示するコードは、スキーマを参照していない、とアポロのドキュメントは、スキーマがサーバの設定で参照されなければならないと言います。スキーマは強調表示されたコードの66行目で参照されていますが、これはGitHub APIに最も関心があると思われる別のポート上のリスナー向けです。 GitHubへの参照を省略するためにポート3010のコードを変更する必要があると言うのは正しいでしょうか? – VikR
サブスクリプションをセットアップしたい場合(現在のように)、サブスクリプションマネージャのコンストラクタに与えられるスキーマオブジェクトが必要です(これは私の答えの最後の部分を指しています)。 'subscriptions-transport-ws'パッケージからServerクラスに与えられます。上の参照は、突然変異とクエリのみを提供するGraphQL POSTエンドポイントに関連しています。この設定がすべて完了したら、GraphQLエンドポイント用と、クライアントにイベントをプッシュするためのWebSocket用に、それぞれ異なるポートに2つのサーバーが残されます。 – davidyaha
専用のwebsocketポートは必要ありません - 私の答えを見てください。 – antirealm