HTTP Server Node.js: 'Loa Phóng Thanh' Backend Của Bạn!
Nodejs

HTTP Server Node.js: 'Loa Phóng Thanh' Backend Của Bạn!

Author

Admin System

@root

Ngày xuất bản

20 Mar, 2026

Lượt xem

3 Lượt

"http.createServer()"

http.createServer(): 'Loa Phóng Thanh' Backend của GenZ

Hey GenZ devlings! Anh Creyt đây, và hôm nay chúng ta sẽ cùng "vibe check" một trong những viên gạch đầu tiên, nhưng cực kỳ quyền năng trong thế giới Node.js: http.createServer(). Nghe tên thì hơi "công nghiệp" tí, nhưng thực ra nó là "main character energy" của mọi ứng dụng backend Node.js đó!

Tưởng tượng thế này: Internet là một khu chợ đêm siêu to khổng lồ, nơi mọi người (trình duyệt, app của bạn) cứ 'alo' gọi nhau để xin đồ (dữ liệu, trang web). Và cái http.createServer() này, nó chính là cái loa phóng thanh mà bạn đặt ở quầy hàng của mình, luôn sẵn sàng lắng nghe mọi tiếng 'alo' từ khách hàng. Khi có ai đó 'alo' (gửi một HTTP request), cái loa của bạn sẽ "báo động", và bạn (code của bạn) sẽ biết ngay để chạy ra xem khách muốn gì, rồi đưa cho họ thứ họ cần (gửi một HTTP response). Đơn giản vậy thôi, no cap!

http.createServer() là gì và để làm gì?

Nói một cách kỹ thuật hơn, http.createServer() là một hàm có sẵn trong module http của Node.js. Nhiệm vụ của nó là tạo ra một đối tượng server HTTP. Đối tượng server này có khả năng lắng nghe các yêu cầu đến từ trình duyệt hoặc các client khác thông qua giao thức HTTP.

Cái hay của nó là bạn truyền vào một callback function (một cái hàm sẽ được gọi mỗi khi có yêu cầu đến). Hàm này nhận hai tham số: request (tất tần tật thông tin về yêu cầu của khách) và response (cái "giỏ hàng" để bạn đựng đồ và gửi trả cho khách).

Code Ví Dụ Minh Hoạ

Đây là cách bạn "đặt cái loa phóng thanh" của mình lên và bắt đầu lắng nghe:

// Bước 1: Gọi module 'http' - như là gọi điện cho tổng đài để xin công cụ làm server vậy
const http = require('http');

// Bước 2: Tạo server của bạn
// http.createServer() nhận một callback function.
// Hàm này sẽ chạy MỖI KHI có một request mới tới server của bạn.
const server = http.createServer((req, res) => {
  // 'req' (request): Chứa mọi thông tin mà client gửi lên (URL, method, headers, data...)
  // 'res' (response): Đối tượng để bạn xây dựng và gửi phản hồi về cho client

  console.log(`Có một request mới tới: ${req.url} với method ${req.method}`);

  // Thiết lập HTTP Header cho response
  // res.writeHead(statusCode, headersObject)
  // 200 OK: Mọi thứ ngon lành cành đào
  // Content-Type: 'text/plain' - báo cho trình duyệt biết đây là text thuần
  res.writeHead(200, { 'Content-Type': 'text/plain; charset=utf-8' });

  // Gửi nội dung phản hồi về cho client
  res.end('Chào GenZ Dev! Đây là server Node.js của anh Creyt!');
});

// Bước 3: Đặt server lắng nghe ở một cổng cụ thể
// server.listen(port, [hostname], [callback])
// Mọi traffic tới cổng 3000 trên máy của bạn sẽ được server này xử lý
const PORT = 3000;
server.listen(PORT, () => {
  console.log(`Server của anh Creyt đang chạy chill chill tại http://localhost:${PORT}/`);
  console.log('Mở trình duyệt và truy cập địa chỉ trên để xem kết quả nhé!');
});

Cách chạy:

  1. Lưu đoạn code trên vào một file, ví dụ app.js.
  2. Mở Terminal/Command Prompt, điều hướng đến thư mục chứa file app.js.
  3. node app.js và nhấn Enter.
  4. Mở trình duyệt và truy cập http://localhost:3000/. Bạn sẽ thấy dòng chữ "Chào GenZ Dev! Đây là server Node.js của anh Creyt!" hiện ra.
Illustration

Giải thích code ví dụ

Trong ví dụ trên, http.createServer() nhận một hàm ẩn danh. Hàm này chính là người trực quầy của bạn. Mỗi khi có khách (request) tới, người này sẽ nhận req (đơn đặt hàng của khách) và dùng res (công cụ để chuẩn bị hàng) để phản hồi lại. Ở đây, chúng ta chỉ đơn giản là gửi về một dòng chữ "Chào GenZ Dev!..." với status 200 OK. Cuối cùng, server.listen(3000) là hành động mở cửa hàng và bảo nó "Ê, mày ra cổng 3000 mà đứng chờ khách nhé!". Đơn giản vậy đó.

Mẹo (Best Practices) để ghi nhớ hoặc dùng thực tế

  • Port là cửa ngõ: Luôn dùng một cổng (port) chưa bị ứng dụng nào khác chiếm dụng. Cổng 3000, 8000, 8080 thường được dùng cho dev.
  • Error Handling: Khi ứng dụng lớn hơn, bạn sẽ cần xử lý lỗi cẩn thận hơn trong callback function để server không bị crash. Ví dụ: server.on('error', (err) => { console.error('Server error:', err); });
  • Phân luồng Logic (Routing): Khi có nhiều loại request (ví dụ: /users, /products), bạn sẽ cần dùng if/else if hoặc các router module để điều hướng request đến đúng "khu vực" xử lý. Cứ như có nhiều quầy hàng trong một siêu thị vậy.
  • Sử dụng Framework: Đối với các dự án thực tế, hiếm khi bạn dùng http.createServer() trần trụi như vậy. Thay vào đó, chúng ta sẽ dùng các framework như Express.js, Koa.js, Hapi.js. Chúng nó giống như những bộ đồ nghề "full option", giúp bạn xây dựng server nhanh hơn, dễ bảo trì hơn rất nhiều. http.createServer() là cái động cơ, còn Express là cái xe hơi hoàn chỉnh.

Ứng dụng/Website đã ứng dụng (nguyên lý)

Nguyên lý của http.createServer() là nền tảng cho mọi ứng dụng web và API được xây dựng với Node.js. Các ứng dụng/website đã ứng dụng nó bao gồm:

  • API đơn giản: Các backend cho ứng dụng di động hoặc Single Page Applications (SPA) có thể bắt đầu với http.createServer() để phục vụ dữ liệu JSON.
  • Microservices: Trong kiến trúc microservices, mỗi service nhỏ có thể dùng một instance của http.createServer() (thường là thông qua một framework) để xử lý một tác vụ cụ thể.
  • Static File Server: Bạn có thể dùng nó để tạo một server đơn giản phục vụ các file HTML, CSS, JS tĩnh.
  • Chat applications (WebSockets): Mặc dù WebSockets là một giao thức khác, nhưng việc nâng cấp từ HTTP sang WebSocket thường bắt đầu từ một HTTP server được tạo bởi http.createServer().

Thử nghiệm đã từng và hướng dẫn nên dùng cho case nào

Anh Creyt đã từng "sống chết" với http.createServer() hồi mới chập chững vào nghề Node.js. Hồi đó, anh còn tự viết cả một cái framework "cây nhà lá vườn" chỉ dựa trên nó để hiểu sâu cách HTTP hoạt động, cách request/response được xử lý từng chút một. Cảm giác lúc đó như kiểu mình tự lắp ráp được một chiếc xe máy vậy, cực kỳ "flex"!

Khi nào nên dùng http.createServer() trực tiếp?

  • Học và hiểu sâu: Đây là cách tốt nhất để bạn nắm vững kiến thức nền tảng về cách Node.js xử lý HTTP request. Nó giúp bạn hiểu "dưới mui xe" các framework như Express hoạt động như thế nào.
  • Viết tool nhỏ, cực kỳ nhẹ: Nếu bạn chỉ cần một server siêu đơn giản để làm một việc gì đó cực kỳ cụ thể (ví dụ: một webhook handler, một server test nhanh), dùng http.createServer() có thể là lựa chọn tối ưu, tránh "overkill" khi kéo thêm Express vào.
  • Tạo framework của riêng bạn (cho vui hoặc học tập): Nếu bạn muốn thử sức tự xây dựng một micro-framework, đây là điểm khởi đầu.

Khi nào nên dùng Framework (Express, Koa, Hapi)?

  • 99% các dự án thực tế: Mọi dự án lớn nhỏ, từ web app, API, đến microservices, đều nên dùng framework. Chúng cung cấp sẵn các công cụ quản lý routing, middleware, template engines, error handling... giúp bạn tiết kiệm hàng tấn thời gian và công sức, đồng thời đảm bảo code sạch sẽ, dễ bảo trì hơn.

Tóm lại, http.createServer() là "bản đồ khởi đầu" cho hành trình Node.js của bạn. Nắm vững nó, bạn sẽ có một nền tảng vững chắc để "combat" với mọi framework và dự án lớn sau này. Keep calm and code on, GenZ!

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é!

#tech #cyberpunk #laravel
Chỉnh sửa bài viết

Bình luận (0)

Vui lòng Đăng Nhập để Bình luận

Hỗ trợ Markdown cơ bản
Nguyễn Văn A
1 ngày trước

Tính năng này đỉnh quá ad ơi, chờ mãi mới thấy một blog Tiếng Việt có UI/UX xịn như vầy!