【发布时间】:2020-01-05 12:20:32
【问题描述】:
我有一个使用 Apollo Server 和 Node.js 的项目设置。以下代码使用 pubsub 模式侦听帖子中的更改,并在它们是 'POSTS_CHANGED' pubsub.publish 事件时触发 graphql 订阅。我将 setInterval 计时器用于演示目的。
我想在客户端连接时触发订阅。那就是在他/她加载页面时获取帖子。但我想不出办法。
const { ApolloServer, PubSub, gql } = require('apollo-server')
const pubsub = new PubSub();
setInterval(async () => {
pubsub.publish('POSTS_CHANGED', { posts: [{title: 'title1', body: 'body1'}] })
}, 5*1000)
const typeDefs = gql`
type Post {
title: String
body: String
}
type Subscription {
posts: [Post]
}
`
const resolvers = {
Subscription: {
posts: {
subscribe: () => pubsub.asyncIterator(['POSTS_CHANGED']),
}
}
};
const apolloServer = new ApolloServer({ typeDefs, resolvers})
apolloServer.listen()
.then((connection) => {
console.log(`Apollo http running on ${connection.url}`)
console.log(`Apollo web sockets running on ${connection.subscriptionsUrl}`)
})
我想避免在页面加载时使用单独的查询来加载帖子,以保持项目的简单和干净,除非有严重的理由这样做。
【问题讨论】:
标签: node.js websocket graphql observable apollo