Trước khi tìm hiểu sâu với về lập trình web, lập trình API với NodeJS thì việc tìm hiểu về express và cách mà nó điều hướng các yêu cầu của người dùng đến với hàm xử lý yêu cầu (router). Trong bài này chúng ta sẽ cùng nhau tìm hiểu về express router nhé.

Express

Đây là một framework tương đối nhỏ gọn cho node.js, nó cung cấp cho chúng ta cách thức khởi tạo một http server tương đối nhanh, cho phép ánh xạ request uri của người dùng đến hàm xử lý. Ngoài ra nó cũng cung cấp chương trình express để chúng ta có thể làm việc với dòng lệnh. Trong bài này chúng ta sẽ tập trung vào khởi tạo một http server và router nhé.

Khởi tạo dự án

Chúng ta có thể khởi tạo một thư mục có tên express-router và một tập tin main.js bên trong.

Khởi tạo http server

Chúng ta có thể khởi tạo server với mã nguồn như sau:

const express = require('express');
const app = express();
const port = 3000;

app.listen(port, () => {
    console.log(`Example app listening on port ${port}`)
});

Để khởi chạy chương trình, trước hết chúng ta cần gõ lệnh yarn để cài thư viện express tiếp theo chúng ta có thể gõ lệnh node main.js, một http server sẽ được khởi tạo và lắng nghe dữ liệu đến từ cồng 3000.

Routing

Cấu tạo của một url

Cấu tạo của 1 URL sẽ có dạng như sau:
[scheme]://[domain]:[port]/[path]?[query]#[fragment]
Ví dụ:
https://techmaster.vn/blog?post=123#content
Ở đây chúng ta có:

  1. Scheme: Bạn có thể hiểu nó là giao thức, ví dụ http, https, ws, wss.
  2. Domain: Là tên miền, ví dụ là techmaster.vn.
  3. Port: Là cổng kết nối, ví dụ 8080, 9090
  4. Path là đường dẫn đến phương thức cài đặt để xử lý yêu cầu, ví dụ /blog.
  5. Query: Là chuỗi chứa các tham số truy vấn, ví dụ post=123.
  6. Fragment: Là đường dẫn đến một phần tử nào đó trong trang (lấy theo id), ví dụ một thẻ nào đó có id là content.

Anh xạ với path

Về bản chất bên trong của express router thì là một ứng dụng của command design pattern hoặc bạn cũng có thể coi là một ứng dụng của observer design pattern, nó ánh xạ các path với các hàm xử lý, ví dụ:

const express = require('express');
const app = express();
const port = 3000;

app.get('/hello', (req, res) => {
    res.send('Hello')
});
  
app.post('/world', (req, res) => {
    res.send('World')
});

app.put('/foo', (req, res) => {
    res.send('Foo')
});

app.delete('/bar', (req, res) => {
    res.send('Bar')
});

app.get('/terms/:termId/posts/:postId', (req, res) => {
    res.send(req.params)
});

app.listen(port, () => {
    console.log(`Example app listening on port ${port}`)
});

Ở đây express cho phép chúng ta ánh xạ các path và các hàm xử lý thông qua các hàm get, post, put, delete tương ứng với các phương thức tiêu chuẩn của HTTP.
Các path có thể là các đường dẫn chính xác như, /hello, /world thì còn có thể là dạng template /terms/:termId/posts/:postId để cho phép thay đổi các giá trị ví dụ như termId, postId để phù hợp với đa dạng yêu cầu tương ứng với các tài nguyên.

Khởi chạy chương trình

Để khởi chạy chương trình chúng ta sử dụng câu lệnh node main.js và kết quả chúng ta nhận được như sau:

Example app listening on port 3000

Và khi chúng ta truy cập vào đường dẫn http://localhost:3000/hello chúng ta sẽ nhận được:

Hay truy cập vào đường dẫn http://localhost:3000/terms/1/posts/2 chúng ta sẽ nhận được:

Tổng kết

Như vậy chúng ta đã cùng nhau tìm hiểu về module events của NodeJS.


Cám ơn bạn đã quan tâm đến bài viết|video này. Để nhận được thêm các kiến thức bổ ích bạn có thể:

  1. Đọc các bài viết của TechMaster trên facebook: https://www.facebook.com/techmastervn
  2. Xem các video của TechMaster qua Youtube: https://www.youtube.com/@TechMasterVietnam nếu bạn thấy video/bài viết hay bạn có thể theo dõi kênh của TechMaster để nhận được thông báo về các video mới nhất nhé.
  3. Chat với techmaster qua Discord: https://discord.gg/yQjRTFXb7a