javascript nodejs graphql
const { ApolloServer, gql, PubSub } = require('apollo-server-express');
const pubsub = new PubSub();
const BOOK_ADDED = 'BOOK_ADDED';
const typeDefs = gql`
type Book {
title: String!
author: String!
}
type Query {
books: [Book]
}
type Mutation {
addBook(title: String!, author: String!): Book
}
type Subscription {
bookAdded: Book
}
`;
const resolvers = {
Query: {
books: () => books,
},
Mutation: {
addBook: (_, { title, author }) => {
const newBook = { title, author };
books.push(newBook);
pubsub.publish(BOOK_ADDED, { bookAdded: newBook });
return newBook;
},
},
Subscription: {
bookAdded: {
subscribe: () => pubsub.asyncIterator([BOOK_ADDED]),
},
},
};
const server = new ApolloServer({
typeDefs,
resolvers,
subscriptions: {
path: '/subscriptions',
},
});
const app = express();
server.applyMiddleware({ app });
const httpServer = require('http').createServer(app);
server.installSubscriptionHandlers(httpServer);
httpServer.listen({ port: 4000 }, () => {
console.log(`🚀 Server ready at http://localhost:4000${server.graphqlPath}`);
console.log(`🚀 Subscriptions ready at ws://localhost:4000${server.subscriptionsPath}`);
});
In the GraphQL Playground, you can test the subscription by running the following: