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.