Tạo Server Cơ Bản trong Node.js

Tạo bởi Hoàng Vũ, chỉnh sửa cuối lúc 31 tháng 1, 2025

Trong Node.js, bạn có thể dễ dàng tạo một máy chủ HTTP để xử lý các yêu cầu từ client. Điều này thường được sử dụng để xây dựng API hoặc các ứng dụng web đơn giản mà không cần dùng đến các framework như Express.

1. Sử dụng module http để tạo server

Tạo một server HTTP đơn giản

Node.js cung cấp module http tích hợp sẵn để tạo một máy chủ. Để tạo một server cơ bản, bạn có thể làm như sau:

Ví dụ: Server trả về "Hello, World!"

const http = require("http");

// Tạo server
const server = http.createServer((req, res) => {
  res.writeHead(200, { "Content-Type": "text/plain" });
  res.end("Hello, World!");
});

// Lắng nghe trên cổng 3000
server.listen(3000, () => {
  console.log("Server đang chạy tại http://localhost:3000");
});

Giải thích:

  1. http.createServer(callback): Tạo một server HTTP. Callback này nhận vào req (request) và res (response).
  2. res.writeHead(200, { "Content-Type": "text/plain" }): Trả về mã trạng thái HTTP 200 OK với kiểu nội dung là text/plain.
  3. res.end("Hello, World!"): Kết thúc response và gửi dữ liệu về client.
  4. server.listen(3000, callback): Server lắng nghe trên cổng 3000.

Chạy lệnh sau để khởi động server:

node server.js

Mở trình duyệt và truy cập http://localhost:3000, bạn sẽ thấy "Hello, World!" hiển thị trên màn hình.

2. Gửi và nhận dữ liệu từ client

Khi client gửi request đến server, ta có thể đọc dữ liệu từ request và trả về response tương ứng.

Xử lý request với nhiều route khác nhau

const http = require("http");

const server = http.createServer((req, res) => {
  res.writeHead(200, { "Content-Type": "text/plain" });

  if (req.url === "/") {
    res.end("Trang chủ");
  } else if (req.url === "/about") {
    res.end("Giới thiệu về chúng tôi");
  } else {
    res.writeHead(404, { "Content-Type": "text/plain" });
    res.end("404 - Không tìm thấy trang");
  }
});

server.listen(3000, () => {
  console.log("Server đang chạy tại http://localhost:3000");
});

Giải thích:

  • Nếu truy cập /, server trả về "Trang chủ".
  • Nếu truy cập /about, server trả về "Giới thiệu về chúng tôi".
  • Nếu truy cập một đường dẫn không xác định, server trả về lỗi 404.

3. Nhận dữ liệu từ client (POST request)

Để nhận dữ liệu từ client (ví dụ: từ form HTML hoặc API request), ta cần lắng nghe dữ liệu gửi lên từ body của request.

Ví dụ: Nhận dữ liệu từ request POST

const http = require("http");

const server = http.createServer((req, res) => {
  if (req.method === "POST" && req.url === "/submit") {
    let body = "";

    req.on("data", (chunk) => {
      body += chunk.toString();
    });

    req.on("end", () => {
      res.writeHead(200, { "Content-Type": "text/plain" });
      res.end(`Dữ liệu nhận được: ${body}`);
    });
  } else {
    res.writeHead(404, { "Content-Type": "text/plain" });
    res.end("404 - Không tìm thấy trang");
  }
});

server.listen(3000, () => {
  console.log("Server đang chạy tại http://localhost:3000");
});

Giải thích:

  1. Kiểm tra nếu request method là POSTURL là /submit.
  2. Sử dụng req.on("data", callback) để lắng nghe dữ liệu gửi lên từ client.
  3. Sử dụng req.on("end", callback) để xử lý khi dữ liệu được gửi hoàn tất.
  4. Trả về dữ liệu nhận được cho client.

Gửi dữ liệu từ client bằng curl

curl -X POST -d "name=John&age=25" http://localhost:3000/submit

Kết quả server sẽ trả về:

Dữ liệu nhận được: name=John&age=25

4. Trả về dữ liệu JSON cho client

Ngoài text, server cũng có thể gửi JSON, đặc biệt hữu ích khi xây dựng API.

const http = require("http");

const server = http.createServer((req, res) => {
  if (req.url === "/api") {
    res.writeHead(200, { "Content-Type": "application/json" });
    res.end(JSON.stringify({ message: "Hello, JSON!" }));
  } else {
    res.writeHead(404, { "Content-Type": "text/plain" });
    res.end("404 - Không tìm thấy trang");
  }
});

server.listen(3000, () => {
  console.log("Server đang chạy tại http://localhost:3000");
});

Truy cập http://localhost:3000/api, bạn sẽ nhận được:

{
  "message": "Hello, JSON!"
}

5. Kết luận

Chức năng Mô tả
Tạo server HTTP Sử dụng http.createServer() để tạo server.
Xử lý request Kiểm tra req.methodreq.url để điều hướng.
Gửi response Dùng res.writeHead()res.end() để gửi phản hồi.
Nhận dữ liệu từ client Lắng nghe req.on("data")req.on("end") để nhận dữ liệu.
Trả về JSON Dùng JSON.stringify()Content-Type: application/json.

Với các kiến thức này, bạn có thể xây dựng một server HTTP cơ bản trong Node.js mà không cần framework.

Website Logo

Với hơn 10 năm kinh nghiệm lập trình web và từng làm việc với nhiều framework, ngôn ngữ như PHP, JavaScript, React, jQuery, CSS, HTML, CakePHP, Laravel..., tôi hy vọng những kiến thức được chia sẻ tại đây sẽ hữu ích và thiết thực cho các bạn.

Bình luận

Website Logo

Chào, tôi là Vũ. Đây là blog hướng dẫn lập trình của tôi.

Liên hệ công việc qua email dưới đây.

lhvuctu@gmail.com

Chúng Tôi Trên

Bạn đang muốn học về lập trình website?

Bạn cần nâng cao kiến thức chuyên nghiệp hơn để nâng cao cơ hội nghề nghiệp? Liên hệ