3

Apollo は初めてなので、見つけた最も単純な例を取り上げ、少し異なる方法で作業することにしました。私のコードはここにあります

私が抱えている問題は、 Mutation を呼び出したときに Subscription が呼び出されないように見えることですcreateTask()。Mutation と Subscription は schema.graphql で次のように定義されています。

type Mutation {
  createTask(
    text: String!
  ): Task
}

type Subscription {
  taskCreated: Task
}

そして resolvers.js で次のように:

Mutation: {
  createTask(_, { text }) {
    const task = { id: nextTaskId(), text, isComplete: false };
    tasks.push(task);
    pubsub.publish('taskCreated', task);
    return task;
  },
},
Subscription: {
  taskCreated(task) {
    console.log(`Subscript called for new task ID ${task.id}`);
    return task;
  },
},

私が期待しているのは、クライアントで次を実行するたびに、サーバーで console.log を取得することです。

mutation Mutation($text: String!) {
  createTask(text:$text) {
    id
    text
    isComplete
  }
}

しかし、何も起こりません。私は何が欠けていますか?

4

1 に答える 1

0

サブスクリプション リゾルバー関数は、GraphQL サブスクリプションへのサブスクリプションが実際に存在する場合に呼び出されます。

Websocket とサブスクリプションをサブスクライブするためsubscriptions-transport-wsに使用するクライアントを追加していないため、機能しません。SubscriptionClient

あなたができることは、購読チャンネルsetupFunctionsSubscriptionManagerpubsub.publish

次のようになります。

...

const WS_PORT = 8080;

const websocketServer = createServer((request, response) => {
  response.writeHead(404);
  response.end();
});

websocketServer.listen(WS_PORT, () => console.log( // eslint-disable-line no-console
  `Websocket Server is now running on http://localhost:${WS_PORT}`
));

const subscriptionManager = new SubscriptionManager({
  schema: executableSchema,
  pubsub: pubsub,
  setupFunctions: testRunChanged: (options, args) => {
    return {
      taskCreated: {
        filter: (task) => {
          console.log(task); // sould be log when the pubsub is called
          return true;
        }
      },
    };
  },
  ,
});

subscriptionServer = new SubscriptionServer({
  subscriptionManager: subscriptionManager
}, {
  server: websocketServer,
  path: '/',
});

...

于 2017-03-21T10:08:04.453 に答える