12/08/2018, 17:23

Xây dựng GraphQL server với Node.js

Ở bài này mình sẽ xây dựng GraphQL server với Node.js Sử dụng các công nghệ chính: Express, apollo server express. Database: Postgresql với Knex query. Mội vài thư viên Javascript khác : dataloader để giải quyết N+1, babel-node để sử dụng ES6 và nodemon để cập nhật server khi thay đổi code. ...

Ở bài này mình sẽ xây dựng GraphQL server với Node.js Sử dụng các công nghệ chính:

  • Express, apollo server express.
  • Database: Postgresql với Knex query.
  • Mội vài thư viên Javascript khác : dataloader để giải quyết N+1, babel-node để sử dụng ES6 và nodemon để cập nhật server khi thay đổi code.
  • Docker for setup development.

Cấu trúc thư mục

Bao gồm các thư mục chính:

  • bussiness: thực ra bạn có thể sử dụng Bookself ORM. Định nghĩa các đối tượng và các hàm để giao tiếp với database
  • knex.file.js, db (index.js, /migrations, /queryBuilders, /seeds): Dùng cho Knex.js để tương tác với database Postgresql
  • Dockerfile, docker-images/db/Dockerfile và docker-compose.yml: Các Dockerfile để xây dựng các images(các image tạo ra container để chạy service) và docker-compose để kết hợp các container với nhau thành 1 hệ thống.
  • config.env: Cài đặt các giá trị để cấu hình hệ thống. Rất quan trọng khi sử dụng trong các môi trường khác nhau (development, production)
  • presentation/schema: Định nghĩa schema (Type, Query, Mutation, resolvers) cho GraphQL
 .
├── bussiness
│   └── hero.js
├── config.env
├── db
│   ├── index.js
│   ├── migrations
│   ├── queryBuilders
│   └── seeds
├── docker-compose.yml
├── Dockerfile
├── docker_images
│   └── db
├── index.js
├── knexfile.js
├── node_modules
├── package.json
├── presentation
│   └── schema.js

Cài đặt môi trường phát triển với Docker

Mình sẽ cần Docker image cho Node.js

FROM node:9.8-alpine

WORKDIR /usr/src/graph

EXPOSE 3000
CMD ["yarn", "run", "serve"]

Và 1 image nữa cho database Postgresql

FROM postgres:9.6.3

Sau đó kết hợp với docker-compose.yml:

  • Server Node với tên là graph sẽ chạy ở cổng 3000
  • Database Postgresql sẽ dùng cổng 5432
  • Dùng file config.env để config các giá trị cần thiết cho Postgresql:
POSTGRES_USER=heroesuser
POSTGRES_PASSWORD=heroespassword
POSTGRES_DB=heroesdb
PGDATA=/data
DB_HOST=db

Và đây là file docker-compose.yml

# docker-compose.yml
version: '3'
services:
  graph:
    build:
      context: .
    image: heroes-graph
    env_file: config.env
    volumes:
      - .:/usr/src/graph
    ports:
      - 3000:3000
    links:
      - db:db
  db:
    build:
      context: ./docker_images/db
    env_file: config.env
    image: heroes-db
    ports:
      - 5432:5432

Server Node với Express

Chúng ta đã cài đặt xong môi trường phát triển với Docker.

Để hệ thống này bạn chỉ cần chạy docker-compose build và docker-compose up là xong.             </div>
            
            <div class=

0