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

Tấn Công Ứng Dụng Web: Mối Đe Dọa Hàng Đầu – Phần 2

viết lại nội dung này ” Phát hiện các cuộc tấn công Cross Site Scripting (XSS)

AI Chatbot 2025: Xu Hướng Tất Yếu Cho Doanh Nghiệp Dẫn Đầu

Giới thiệu AI chatbots đã trải qua một hành trình đáng kể, từ những công cụ t

Tấn Công Ứng Dụng Web: Mối Đe Dọa Hàng Đầu – Phần 1

Tấn công web là gì? Ứng dụng web là các ứng dụng cung cấp dịch vụ cho người

SEO Mũ Trắng, Mũ Đen, Mũ Xám: Hiểu Biết và Lựa Chọn Phù Hợp

SEO Mũ Trắng, Mũ Đen, Mũ Xám: Hiểu Biết và Lựa Chọn Phù Hợp Trong kỷ nguyên s