
Các em hình dung thế này: Web app của chúng ta giống như một nhà hàng lớn, hoành tráng. Mỗi khi ai đó muốn 'ăn' gì đó (tức là muốn lấy dữ liệu, muốn xem một trang web), họ sẽ 'ra lệnh' cho nhà hàng. Và cái 'lệnh' phổ biến nhất, cơ bản nhất để 'lấy' món ăn, chính là GET. Trong nhà hàng của Express.js, app.get() chính là anh quản lý bếp kiêm phục vụ, sẵn sàng lắng nghe yêu cầu 'GET' của khách hàng và mang món ăn đến tận bàn cho họ.
Nói một cách hàn lâm hơn, app.get() là một phương thức (method) của đối tượng app trong framework Express.js (một framework 'xịn xò' của Node.js). Chức năng chính của nó là định nghĩa một route handler (bộ xử lý tuyến đường) cho các yêu cầu HTTP GET. Tức là, khi trình duyệt của người dùng (hoặc bất kỳ client nào) gửi một yêu cầu GET đến một đường dẫn (URL) cụ thể trên server của em, app.get() sẽ 'chộp' lấy yêu cầu đó và thực thi một đoạn code mà em đã định nghĩa sẵn.
Nôm na là, khi em gõ facebook.com vào trình duyệt, trình duyệt của em đang gửi một yêu cầu GET đến server của Facebook để 'GET' về trang chủ đó. Hoặc khi em click vào một bài post, em đang 'GET' nội dung của bài post đó. app.get() chính là cái 'cửa' mà server Facebook dùng để nhận các yêu cầu đó và trả về nội dung tương ứng.
Code Ví Dụ Minh Hoạ
Để 'thấy tận mắt, sờ tận tay' cái anh app.get() này, chúng ta cùng code một ví dụ siêu đơn giản với Express.js nhé. Đầu tiên, đảm bảo em đã cài Node.js và Express.js (nếu chưa, chạy npm init -y rồi npm install express trong folder project).
// server.js - File khởi tạo server của chúng ta
const express = require('express'); // 'Gọi' Express vào để dùng
const app = express(); // Khởi tạo 'nhà hàng' Express của chúng ta
const port = 3000; // Cổng mà 'nhà hàng' sẽ mở cửa
// Đây chính là app.get() đầu tiên của chúng ta!
// Khi khách hàng 'GET' đến đường dẫn gốc '/'
app.get('/', (req, res) => {
// req: request - đơn đặt hàng của khách
// res: response - món ăn mà chúng ta sẽ trả về
res.send('Chào mừng đến với quán ăn vặt của Creyt! Đây là trang chủ.');
});
// Một app.get() khác cho đường dẫn '/about'
app.get('/about', (req, res) => {
res.send('Chúng tôi là Creyt, chuyên gia gỡ rối code cho GenZ!');
});
// Một app.get() 'xịn sò' hơn, có tham số động (dynamic parameter)
// Ví dụ: /users/creyt hoặc /users/alice
app.get('/users/:username', (req, res) => {
const username = req.params.username; // Lấy 'username' từ đơn đặt hàng
res.send(`Xin chào, ${username}! Rất vui được gặp bạn tại đây.`);
});
// Khởi động 'nhà hàng'
app.listen(port, () => {
console.log(`Server của Creyt đang chạy tưng bừng tại http://localhost:${port}`);
});
Để chạy code này, em lưu nó thành server.js rồi mở Terminal/CMD, di chuyển vào thư mục chứa file đó và gõ node server.js. Sau đó, mở trình duyệt và truy cập http://localhost:3000, http://localhost:3000/about, và thử http://localhost:3000/users/yourname xem sao nhé.
Giải Phẫu app.get(path, callback):
path(Đường dẫn): Đây là cái URL mà khách hàng sẽ 'gõ' vào để yêu cầu món ăn. Ví dụ:/,/about,/users/:username. Dấu hai chấm:trướcusernamenghĩa là đây là một tham số động, nó sẽ thay đổi tùy theo khách hàng muốn 'GET' ai.callback(Hàm xử lý): Đây là 'đầu bếp' và 'phục vụ' của chúng ta. Nó là một hàm sẽ được thực thi khi có yêu cầu GET đến đúngpathđó. Hàm này luôn có hai tham số quan trọng:req(Request - Đơn đặt hàng): Chứa tất tần tật thông tin về yêu cầu của khách hàng: họ muốn gì, gửi từ đâu, dữ liệu kèm theo (nếu có), các tham số URL (req.params), các query string (req.query),...res(Response - Món ăn trả về): Đây là công cụ để chúng ta 'trả hàng' cho khách. Em có thể dùngres.send()để gửi chuỗi,res.json()để gửi dữ liệu JSON,res.render()để gửi một trang HTML đã được render, hoặcres.status().send()để gửi mã trạng thái HTTP kèm thông báo.

Mẹo Hay (Best Practices) Từ Giảng Viên Creyt:
- Đừng Quên 'Nón Bảo Hiểm' (Xử Lý Lỗi): Luôn nghĩ đến trường hợp xấu nhất. Nếu có lỗi xảy ra trong quá trình xử lý yêu cầu GET (ví dụ: không tìm thấy dữ liệu trong database), hãy trả về một mã trạng thái lỗi thích hợp (như
res.status(404).send('Không tìm thấy')hoặcres.status(500).send('Lỗi máy chủ')). Khách hàng sẽ không thích một món ăn bị hỏng đâu. - Chia Bếp Ra Nhiều Khu (Tổ Chức Routes): Khi ứng dụng lớn lên, em sẽ có hàng trăm
app.get(). Đừng nhồi nhét tất cả vào một fileserver.js. Hãy tách chúng ra thành các module (ví dụ:userRoutes.js,productRoutes.js) và dùngapp.use()để 'gắn' chúng vào ứng dụng chính. Giống như mỗi khu bếp chuyên một món vậy. - Tận Dụng 'Phụ Bếp' (Middleware): Express.js có một khái niệm cực mạnh là Middleware. Đó là các hàm chạy 'trước' khi yêu cầu đến được
app.get()của em. Em có thể dùng middleware để kiểm tra quyền truy cập (xem khách có 'visa' không), ghi log yêu cầu, hoặc xử lý dữ liệu đầu vào. - Đặt Tên Đường Dẫn 'Dễ Đọc, Dễ Hiểu': Đừng đặt
/a,/b. Hãy dùng/products,/users,/posts/:id. Giống như tên món ăn trên menu vậy, phải rõ ràng để khách hàng dễ gọi.
Ứng Dụng Thực Tế - app.get() Ở Khắp Mọi Nơi!
Em có biết, hầu hết những gì em thấy trên Internet đều bắt đầu từ một yêu cầu GET không?
- Facebook/Instagram: Khi em cuộn feed, mỗi lần load thêm bài viết mới, đó là một yêu cầu GET đến API của họ để lấy dữ liệu bài viết. Khi em vào trang cá nhân của bạn bè, đó là một GET khác để lấy thông tin profile của họ.
- Shopee/Lazada: Khi em tìm kiếm sản phẩm, kết quả trả về là từ một yêu cầu GET. Khi em click vào một sản phẩm để xem chi tiết, đó là một GET nữa để lấy thông tin chi tiết của sản phẩm đó.
- Báo điện tử (VnExpress, Zing News): Khi em vào trang chủ, đó là GET để lấy danh sách các bài báo mới nhất. Khi em click vào một bài báo cụ thể, đó là GET để lấy nội dung đầy đủ của bài báo đó.
Thử Nghiệm và Nên Dùng Cho Case Nào?
app.get() sinh ra là để lấy dữ liệu (retrieve data) hoặc hiển thị một trang nào đó.
-
Khi nào nên dùng:
- Hiển thị trang chủ, trang giới thiệu, trang liên hệ.
- Lấy danh sách tất cả người dùng, sản phẩm, bài viết.
- Lấy chi tiết một người dùng, sản phẩm, bài viết cụ thể (dùng tham số động như
/users/:id). - Tìm kiếm dữ liệu (thường dùng
req.queryđể lấy các tham số tìm kiếm). Ví dụ:/products?category=electronics&price_min=100. - Tải về một file (ví dụ:
res.download()).
-
Khi nào KHÔNG nên dùng (hoặc nên cân nhắc):
- Thêm mới dữ liệu: Dùng
app.post()(như việc gửi form đăng ký, tạo bài viết mới). Khách hàng không 'GET' một món ăn mới mà họ 'POST' một yêu cầu tạo ra món ăn đó. - Cập nhật dữ liệu: Dùng
app.put()hoặcapp.patch(). - Xóa dữ liệu: Dùng
app.delete().
- Thêm mới dữ liệu: Dùng
Tóm lại, app.get() là cánh cửa đầu tiên, là 'lệnh gọi' cơ bản nhất để tương tác với server của em. Nắm vững nó, em đã có chìa khóa để bắt đầu xây dựng những ứng dụng web động rồi đấy. Cứ thực hành nhiều vào, lỗi là chuyện bình thường, 'mắc kẹt' là lúc học được nhiều nhất. Creyt tin em sẽ làm được!
Thuộc Series: Nodejs
Bài giảng này được tự động xuất bản ngẫu nhiên từ thư viện kiến thức. Đừng quên đón xem các Từ khoá Hướng Dẫn tiếp theo nhé!