J'ai un serveur graphql et j'essaye de déclencher un événement chaque fois que le statut d'une entité est mis à jour. J'ai une mutation pour mettre à jour l'entité, qui utilise graphql-subscriptions
pour publier la mise à jour pour l'abonné à écouter. Cependant, pubsub.subscribe(EVENT_NAME)
a détecté la modification, mais lorsque je l'intègre dans le résolveur d'abonnement, il ne déclenche pas la mise à jour.L'abonnement Apollo ne fonctionne pas
J'ai modifié des parties du code qui ne sont pas pertinentes par souci de concision.
Mon résolveur:
Mutation: {
updateStatus(_, { id, status, hash }) {
return repository.updateStatus(id, status, hash);
}
},
Subscription: {
updatedStatus: {
subscribe:() => pubsub.asyncIterator('updatedStatus'),
}
},
Mon dépôt:
export const updateStatus = async function(id: String, status: String, hash: String) {
try {
const res = await fetch(`${baseURL}/article/${id}/status?publish_hash=${hash}`, {
headers,
method: 'PATCH',
body: JSON.stringify({ status })
});
const article = await fetchSingleArticle(id, 'XML', headers.channel, false);
await pubsub.publish('updatedStatus', article);
return article;
} catch (e) {
console.log(e.message);
}
}
Mon schéma:
type Mutation {
updateStatus(id: ID!, status: PublishingStatus = PUBLISHING, hash: String): Article
}
type Subscription {
updatedStatus(id: ID!): Article
}
schema {
query: Query
mutation: Mutation
subscription: Subscription
}
Pour tester cela, je suis juste en utilisant graphiql, qui capte la connexion websocket bien.
J'ai essayé de publier en utilisant à la fois article
(comme illustré) et { updatedStatus: article }
, aucun des deux ne semble être détecté.
Comme mentionné précédemment pubsub.subscribe('updatedStatus')
prend le changement. Le problème semble donc lié au résolveur d'abonnement.
Je vais au large des documents suivants: http://dev.apollodata.com/tools/graphql-subscriptions/setup.html#setup