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

9 Mẹo lập trình Web “ẩn mình” giúp tiết kiệm hàng giờ đồng hồ

Hầu hết các lập trình viên (kể cả những người giỏi) đều tốn thời gian x

Can GPT-4o Generate Images? All You Need to Know about GPT-4o-image

OpenAI‘s GPT-4o, introduced on March 25, 2025, has revolutionized the way we create visual con

Khi nào nên dùng main, section, article, header, footer, và aside trong HTML5

HTML5 đã giới thiệu các thẻ ngữ nghĩa giúp cấu trúc nội dung web một cách có

So sánh Webhook và API: Khi nào nên sử dụng?

Trong lĩnh vực công nghệ thông tin và phát triển phần mềm, Webhook và API là hai th