2016-10-26 3 views
3

아폴로를 처음 접했으므로, most simple example I found을 사용하고 약간 다른 방식으로 시도해보기로했습니다. 내 코드는 found here 일 수 있습니다.Apollo Subscription이 Mutation에서 호출되지 않는 것 같습니다.

내가 겪고있는 문제는 Mutation을 호출 할 때 구독이 호출되지 않는 것입니다. createTask().

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

type Subscription { 
    taskCreated: Task 
} 

하고 resolvers.js에서 : 돌연변이 및 가입은 다음과 같이 schema.graphql에 정의되어

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 
    } 
} 

하지만 아무 일도 일어나지 않습니다. 내가 뭘 놓치고 있니?

+0

은 문제가 무엇인지 파악하는 일이? – Justin

+0

내가 그랬 으면 좋겠어. 그것도 조사 할 시간이 없었어요. – CodeChimp

+0

동일한 문제가 : c – kayla

답변

0

서브 스크립 션 해결 기능은 실제로 GraphQL 서브 스크립 션에 가입되어있을 때 호출됩니다.

subscriptions-transport-wsSubscriptionClient을 사용하는 클라이언트를 websocket 및 가입에 가입시키지 않았으므로 가입이되지 않습니다.

SubscriptionManagersetupFunctions에 구독 채널을 추가하면 pubsub.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: '/', 
 
}); 
 

 
...