Mr Sói

Tạo một NodeJS GraphQL API với mongoDB và Hapi! - Phần 2

Phần 1: Tạo server, route với hapi và kết với mongoDB mlab.com.Phần 2: Tạo model và khởi tạo API với chức năng POST, GET căn bản.Phần 3: Bắt đầu với GraphQL nào.Phần cuối: Hoàn thành project, kết thúc series và viết đôi ba dòng.Ở phần

Ở phần trước chúng ta đã tạo ra được một cái server cơ bản rồi, đã kết nối được với CSDL rồi đúng không nào... Bài này ta sẽ tạo ra một model mới với các chức năng cơ bản của một API là POST dữ liệu lên và GET dữ liệu về.

3. Tạo model:

Bạn tạo một thư mục models, rồi tạo thêm file Book.js trong thư mục models vừa tạo đó.

Book.js sẽ chứa tất cả thông về sách của minh, nhìn no giống thế này:

  • Cần có mongoose dependency.
  • BookSchema sẽ chứa toàn bộ Schema lấy từ mongoose, đây là một dependency cực kỳ vi diệu.
  • Export cái schema đó ra thôi.

4. Thêm routes mới:

Sửa một chút code cũ:

Mình sẽ sửa lại một số ở code, thay vì ném toàn bộ vào file index.js chúng ta sẽ tạo ra một thư mục routes, và tạo một file Hello.js như thế này:

Sau đó sửa lại file index.js:

Mình làm thế này vì vài lý do, nhưng cơ bản thì bạn cũng thấy được là hai đoạn code này giống nhau đúng không nào... Kết quả trả về vẫn là vậy.

Tiếp tục nào...

Giờ chúng ta sẽ tạo ra một route có chức năng nhận dữ liệu sách và gửi thông tin sách lên cho CSDL!

Ý tương sẽ là thế này, khi người dùng truy cập vào;

  • GET /api/v1/books => Thông tin toàn bộ số sách
  • POST /api/v1/books => Gửi thông tin sách lên
    Và theo REST bình thường thì;
  • GET /api/v1/books/{id} => Thông tin sách có giá trị id = {id}

Tạo một file mới tên là Book.js ở thư mục routes.

Chú ý một số chỗ nè:

  • Route là một mảng nha, nó sẽ chứa rất nhiều phần tử route.
  • Book.find() là của mongoose và nó sẽ trả về tất cả sách trong CSDL mà không có điều kiện tìm kiếm nào cả.
    -POST cũng cùng đường dẫn với GET, và nội dung post lên chứa đúng các tham số mình đã khai báo trước đo.
  • Giống find(), save() có chức năng lưu book vào Book.

Chỉ trả về mảng trống vì về cơ bản, ta chưa có gì trong CSDL. Giờ ta thử POST lên một quyển sách:

Đã xong, giờ ta thử GET Lại xem đã có dữ liệu chưa?

Xong!!!! Tốt rồi, tuy nhiên chúng ta chỉ mới qua được 1/2 chặn được, tiếp theo sẽ là graphQL, phần chính đáng nói ở đây. Hẹn gặp bạn ở bài nào đó khác.

Xem source ở https://github.com/f97/hapi-mongodb-graphql-api

Author image
Website
Nhiều năm qua, tôi luôn học tập một việc, chính là không quay đầu lại, chỉ vì bản thân chưa từng làm chuyện gì phải hối hận, không hối hận vì những chuyện mình đã làm.