Last active
February 28, 2019 10:52
-
-
Save devarajchidambaram/aef27b138e2ff09ffc0c0d44f86861f8 to your computer and use it in GitHub Desktop.
Graphql example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| //Refferd https://medium.com/codingthesmartway-com-blog/creating-a-graphql-server-with-node-js-and-express-f6dddc5320e1 | |
| var express = require('express'); | |
| var express_graphql = require('express-graphql'); | |
| var { buildSchema } = require('graphql'); | |
| // GraphQL schema | |
| var schema = buildSchema(` | |
| type Query { | |
| course(id: Int!): Course | |
| courses(topic: String): [Course] | |
| }, | |
| type Course { | |
| id: Int | |
| title: String | |
| author: String | |
| description: String | |
| topic: String | |
| url: String | |
| } | |
| type Mutation { | |
| updateCourseTopic(id: Int!, topic: String!): Course | |
| } | |
| `); | |
| var coursesData = [ | |
| { | |
| id: 1, | |
| title: 'The Complete Node.js Developer Course', | |
| author: 'Andrew Mead, Rob Percival', | |
| description: 'Learn Node.js by building real-world applications with Node, Express, MongoDB, Mocha, and more!', | |
| topic: 'Node.js', | |
| url: 'https://codingthesmartway.com/courses/nodejs/' | |
| }, | |
| { | |
| id: 2, | |
| title: 'Node.js, Express & MongoDB Dev to Deployment', | |
| author: 'Brad Traversy', | |
| description: 'Learn by example building & deploying real-world Node.js applications from absolute scratch', | |
| topic: 'Node.js', | |
| url: 'https://codingthesmartway.com/courses/nodejs-express-mongodb/' | |
| }, | |
| { | |
| id: 3, | |
| title: 'JavaScript: Understanding The Weird Parts', | |
| author: 'Anthony Alicea', | |
| description: 'An advanced JavaScript course for everyone! Scope, closures, prototypes, this, build your own framework, and more.', | |
| topic: 'JavaScript', | |
| url: 'https://codingthesmartway.com/courses/understand-javascript/' | |
| } | |
| ] | |
| var getCourse = function(args) { | |
| var id = args.id; | |
| return coursesData.filter(course => { | |
| return course.id == id; | |
| })[0]; | |
| } | |
| var getCourses = function(args) { | |
| if (args.topic) { | |
| var topic = args.topic; | |
| return coursesData.filter(course => course.topic === topic); | |
| } else { | |
| return coursesData; | |
| } | |
| } | |
| var updateCourseTopic = function({id, topic}) { | |
| coursesData.map(course => { | |
| if (course.id === id) { | |
| course.topic = topic; | |
| return course; | |
| } | |
| }); | |
| return coursesData.filter(course => course.id === id) [0]; | |
| } | |
| var root = { | |
| course: getCourse, | |
| courses: getCourses, | |
| updateCourseTopic: updateCourseTopic | |
| }; | |
| // Create an express server and a GraphQL endpoint | |
| var app = express(); | |
| app.use('/graphql', express_graphql({ | |
| schema: schema, | |
| rootValue: root, | |
| graphiql: true | |
| })); | |
| app.listen(4000, () => console.log('Express GraphQL Server Now Running On localhost:4000/graphql')); | |
| /** | |
| query getCourseWithFragments($courseID1: Int!, $courseID2: Int!) { | |
| course1: course(id: $courseID1) { | |
| ...courseFields | |
| }, | |
| course2: course(id: $courseID2) { | |
| ...courseFields | |
| } | |
| } | |
| fragment courseFields on Course { | |
| title | |
| author | |
| topic | |
| url | |
| } | |
| == | |
| fragment courseFields on Course { | |
| title | |
| author | |
| topic | |
| url | |
| } | |
| mutation updateCourseTopic($id: Int!, $topic: String!) { | |
| updateCourseTopic(id: $id, topic: $topic) { | |
| ... courseFields | |
| } | |
| } | |
| === | |
| query getCourseWithFragments($courseID1: Int!, $courseID2: Int!) { | |
| course1: course(id: $courseID1) { | |
| ...courseFields | |
| }, | |
| course2: course(id: $courseID2) { | |
| ...courseFields | |
| } | |
| } | |
| fragment courseFields on Course { | |
| title | |
| author | |
| description | |
| topic | |
| url | |
| } | |
| === | |
| query getSingleCourse($courseID: Int!) { | |
| course(id: $courseID) { | |
| title | |
| author | |
| description | |
| topic | |
| url | |
| } | |
| } | |
| === | |
| **/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment