+5

[NodeJS]Use GraphQL with ExpressJS

Mở đầu

Ở phần trước mình đã giới thiệu về GraphQL, phần này mình sẽ hướng dẫn cách tích hợp graphql vào project expressjs sử dụng mongodb.

Tạo project bằng ExpressJS

 express --view=pug graphql-express

Cấu trúc project:

  • public: Assest folder
  • routes: Chứa các routes
  • schema: Schema dùng cho graphql
  • views: template view

Tiến hành cài đặt graphql, express-graphql, mongoose:

npm install --save graphql express-graphql mongoose

Tích hợp GraphQL

Tạo schema cho graphql

const schema = new GraphQLSchema({
  query: new GraphQLObjectType({
    name: 'RootQueryType',
    description: 'The root of all... queries',
    fields: {
      todo: {
        type: new GraphQLList(TodoType),
        args: {
          itemId: {
            name: 'itemId',
            type: new GraphQLNonNull(GraphQLInt)
          }
        },
        resolve: (root, {
          itemId
        }, source, fieldASTs) => {
          var projections = getProjection(fieldASTs);
          var foundItems = new Promise((resolve, reject) => {
            ToDoMongo.find({
              itemId
            }, projections, (err, todos) => {
              err ? reject(err) : resolve(todos)
            })
          })
          return foundItems
        }
      }
    }
  })
});

Tích hợp vào ExpressJS

import schema from './schema/schema';
import graphqlHTTP from 'express-graphql';
app.use('/graphql', graphqlHTTP({
  schema: schema,
  graphiql: true
}));

Connect tới MongoDB: Ở đây mình sử dụng docker để chạy mongo, các bạn có thể chạy trực tiếp nếu trên máy đã có mongo rùi:

docker run -p 27017:27017 --name graphql-express-mongo -d
mongoose.connect('mongodb://localhost:27017/local')
var mongoDs = mongoose.connection;

mongoDs.on('error', () => {
  console.log('Failed to connect to mongoose')
})
mongoDs.once('open', () => {
  console.log('Connected to mongoose')
})

Vậy là tạm xong việc setup. Bây giờ chúng ta sẽ test graphql.

Đâu tiên sẽ tạo model todo:

Dùng graphql để query model. Chú ý ở đây bạn có thể tuỳ chỉnh query để lấy ra những thông tin tương ứng:

Reference

http://graphql.org/graphql-js/type/#graphqlschema

Sourcecode: https://github.com/PhuongNL/graphql-express


Introduction to GraphQL - P1


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.