Deno thức thứ 2 phân tích yêu cầu nghiệp vụ, làm quen với mongodb

Ở bài viết trước, chúng ta đã xây dựng các module khá nhỏ và viết hello world với Deno. 1. Phân tích yêu cầu Ở bài này, mình sẽ phân tích 1 chút các chức năng của api tới chúng ta sẽ triển khai và cách tương tác với cơ sở dữ liệu, ở đây

Ở bài viết trước, chúng ta đã xây dựng các module khá nhỏ và viết hello world với Deno.

1. Phân tích yêu cầu

Ở bài này, mình sẽ phân tích 1 chút các chức năng của api tới chúng ta sẽ triển khai và cách tương tác với cơ sở dữ liệu, ở đây mình sử dụng MongoDB
Khá thiếu sót khi bài trước mình không phân tích chức năng của api mình cần làm nên bài này mình sẽ gộp luôn.
Chúng ta sẽ đi từ cơ bản đến xây dựng một vài api của shop bán thời trang, các api chúng ta cần sẽ là

  • Đăng ký (POST): /api/v1/sign-up
  • Đăng nhập (POST): /api/v1/sign-in
  • Xem thông tin người dùng (GET): /api/v1/user-profile
  • Xem danh sách sản phẩm (GET) : /api/v1/products
  • … có thể có thêm mình sẽ bổ xung sau

2. Làm quen với MongoDB

Để làm việc với mongoDB, chúng ta cần sử dụng https://deno.land/x/[email protected]. Thư viện cung cấp các api giúp chúng ta thao tác với mongoDB khá dễ
Ở thư mục project, chúng ta sẽ tạo thêm folder để thao tác với datasbe, model để chứa các entity của project, repository để thực hiện các thao tác query với mongodb tương ứng với từng entity

|__controller
|__database
|__repository
|__model
|__router

Chúng ta sẽ tạo ra một instance để thao tác với mongoDB và export nó ra ngoài :

database/database.ts :

import{MongoClient }from"https://deno.land/x/[email protected]/mod.ts";constURI="mongodb://127.0.0.1:27017";const client =newMongoClient();await client.connect(URI);const database = client.database('deno-tutorial');exportdefault database;

Tạo ra user tối giản về các field, vì chúng ta chỉ demo mà thôi 😄

model/user.ts:

exportinterfaceUser{
    userName: String;
    password: String;
    numberPhone: String;}

repository/userRepository.ts

import{User}from"../model/user.ts";import database from"../database/database.ts";const userCollection = database.collection("users");exportconstcreateUser=async(user: User)=>{returnawait userCollection.insertOne(user);}

controllers/userController.ts

import{Context, Status}from"https://deno.land/x/[email protected]/mod.ts";import{createUser}from"../repository/userRepository.ts";exportconstsignUpHandler=async(context: Context)=>{const body =await context.request.body();const value =await body.value;const id =awaitcreateUser(value);if(id){
        context.response.status = Status.OK;}}

và cuối cùng, chúng ta thêm handler đó vào router thôi

router/router.ts

import{Router}from"https://deno.land/x/[email protected]/mod.ts";import{helloHandler}from"../controllers/helloController.ts";import{signUpHandler}from"../controllers/userController.ts";let router =newRouter();
router
    .get("/", helloHandler).post("/api/v1/sign-up", signUpHandler);exportdefault router;

Chúng ta có thể dùng postman để kiểm tra kết quả, lúc này chúng ta cần allow thêm 1 số quyền cho mongodb như sau : deno run --allow-net --allow-write --allow-read --unstable server.ts

ở phía mongo :

Ở bài tiếp theo mình sẽ hướng dẫn sử dụng jwt và login với deno. Cảm ơn các bạn đã theo dõi

Nguồn: viblo.asia

Bài viết liên quan

WebP là gì? Hướng dẫn cách để chuyển hình ảnh jpg, png qua webp

WebP là gì? WebP là một định dạng ảnh hiện đại, được phát triển bởi Google

Điểm khác biệt giữa IPv4 và IPv6 là gì?

IPv4 và IPv6 là hai phiên bản của hệ thống địa chỉ Giao thức Internet (IP). IP l

Check nameservers của tên miền xem website trỏ đúng chưa

Tìm hiểu cách check nameservers của tên miền để xác định tên miền đó đang dùn

Mình đang dùng Google Domains để check tên miền hàng ngày

Từ khi thông báo dịch vụ Google Domains bỏ mác Beta, mình mới để ý và bắt đầ