使用 GraphQl 订阅我正面临一个奇怪的问题。出于实时更新的目的,我在服务器 (NodeJs) 上使用 MongoDB Change Stream功能并为前端 (Angular) 使用 GraphQl 订阅。因此,当数据库中出现一些更改时,它会通过 GraphQl 订阅发送到客户端。在 Angular 组件上,有 GraphQl 订阅实现(使用Apollo 客户端):
...
ngOnInit() {
this.subscribeToApprovedNews(this.params);
}
subscribeToApprovedNews(params) {
this.newsQuery.subscribeToMore({
document: addApprovedNews,
variables: {
projectId: params
},
updateQuery: (previous, { subscriptionData }) => {
...
const newItem = subscriptionData.data['addApprovedNews'];
console.log(`${params} -> added news -> ${newItem}`);
...
}
});
}
但是当我们进入这个组件n次时,在数据库中的一次更改中,我们会收到这n次来自订阅的数据。据我了解,当我们进入组件时,客户端已经建立了新的 WebSocket 连接: Chrome 开发人员工具的“网络”选项卡 作为 GraphQL 订阅的传输,我使用subscriptions-transport-ws包。
因此,数据库上的一个更改会触发多个 QraphQl 订阅解析器,因此在客户端我们会收到有关更改的重复通知。无论用户进入组件多少次,如何解决此行为并每次订阅只接收一个数据?
先感谢您!