http.get() trong Node.js: Đặt Grab Data Của Bạn!
Nodejs

http.get() trong Node.js: Đặt Grab Data Của Bạn!

Author

Admin System

@root

Ngày xuất bản

20 Mar, 2026

Lượt xem

2 Lượt

Chào các "thợ code" Gen Z tương lai! Anh Creyt biết mấy đứa đang "đu" theo trend lập trình, và hôm nay, chúng ta sẽ "khui" một khái niệm siêu cơ bản nhưng quyền năng trong Node.js: http.get(). Nghe có vẻ "hack não" nhưng thực ra nó dễ như "ăn kẹo" thôi!

1. http.get() là gì mà "hot" thế?

"Em ơi, cho anh xin cái menu!" – Đó chính là tinh thần của http.get(). Tưởng tượng thế này: Internet là một "siêu thị" khổng lồ, và dữ liệu là vô vàn món hàng. Đôi khi, bạn muốn "ngó nghiêng" xem có gì mới, hoặc cần "lấy" một món hàng cụ thể nào đó về dùng. Lúc này, http.get() chính là "Grab" của bạn – một "phu xe" chuyên nghiệp được Node.js cử đi để "lấy hàng" về.

Nói một cách "học thuật" hơn, http.get() là một phương thức trong module http "built-in" (có sẵn) của Node.js, dùng để thực hiện các yêu cầu HTTP GET đến một server nào đó. "GET" ở đây có nghĩa là "lấy", "truy xuất" dữ liệu. Nó không dùng để gửi dữ liệu nhạy cảm hay thay đổi trạng thái server đâu nhé, chỉ để "đọc" thôi.

Để làm gì?

  • Lấy dữ liệu API: Muốn hiển thị thời tiết hiện tại ư? http.get() sẽ đi hỏi "ông thần" dự báo thời tiết (API server) về nhiệt độ, độ ẩm rồi mang về cho bạn.
  • Đọc nội dung website: Đôi khi bạn muốn lấy nội dung HTML của một trang web để "cào dữ liệu" (web scraping) hoặc đơn giản là hiển thị nó.
  • Tải file: Dù không phải là mục đích chính, nhưng bạn có thể dùng nó để tải các file nhỏ.

2. Code Ví Dụ Minh Hoạ: "Đầu bếp" Creyt trổ tài!

Để "thực hành" ngay, anh Creyt sẽ hướng dẫn các bạn "đặt hàng" một vài "món ngon" từ một API công cộng (JSONPlaceholder – một API giả lập cho dev).

Đầu tiên, bạn cần "nhập khẩu" (import) module http:

Gợi Ý Đọc Tiếp
Node.js Path Module: GPS cho file của GenZ!

2 Lượt xem

const http = require('http');

Giờ thì chúng ta "triệu hồi" http.get() để "lấy hàng" nhé. Hãy thử lấy danh sách các bài viết (posts):

const http = require('http');

const url = 'http://jsonplaceholder.typicode.com/posts/1'; // Lấy bài viết số 1

console.log('Anh Creyt đang gửi "Grab" đi lấy dữ liệu...');

http.get(url, (res) => {
  const { statusCode } = res; // Mã trạng thái HTTP (200 OK, 404 Not Found, ...) 
  const contentType = res.headers['content-type']; // Loại nội dung (application/json, text/html, ...)

  let error; // Biến để lưu lỗi nếu có
  if (statusCode !== 200) {
    error = new Error(`Request Failed.\nStatus Code: ${statusCode}`);
  } else if (!/^application\/json/.test(contentType)) {
    error = new Error(`Invalid content-type.\nExpected application/json but received ${contentType}`);
  }
  if (error) {
    console.error(`"Grab" báo lỗi: ${error.message}`);
    // Tiêu thụ dữ liệu phản hồi để giải phóng bộ nhớ.
    res.resume(); 
    return;
  }

  res.setEncoding('utf8'); // Đặt mã hóa cho dữ liệu nhận được
  let rawData = ''; // Chuỗi để lưu trữ toàn bộ dữ liệu

  // Khi có dữ liệu về từng "miếng" (chunk)
  res.on('data', (chunk) => { rawData += chunk; });

  // Khi toàn bộ dữ liệu đã về đủ
  res.on('end', () => {
    try {
      const parsedData = JSON.parse(rawData); // Thử "bóc tem" JSON
      console.log('Dữ liệu đã về đủ đây Gen Z ơi:');
      console.log(parsedData);
    } catch (e) {
      console.error(`Lỗi khi "bóc tem" dữ liệu JSON: ${e.message}`);
    }
  });

}).on('error', (e) => {
  console.error(`Lỗi kết nối mạng hoặc server không phản hồi: ${e.message}`);
});

Giải thích "từng đường đi nước bước" trong code:

  1. http.get(url, (res) => { ... }): Đây là lời gọi chính. url là địa chỉ bạn muốn "lấy hàng". (res) => { ... } là một hàm callback, sẽ được thực thi khi server "trả lời" (response). res (response) là một object chứa thông tin về phản hồi từ server.
  2. statusCode, contentType: Kiểm tra mã trạng thái (200 là OK, 404 là "không tìm thấy", v.v.) và loại nội dung để đảm bảo mọi thứ "ngon lành cành đào".
  3. res.resume(): Nếu có lỗi, chúng ta gọi res.resume() để đảm bảo luồng dữ liệu vẫn tiếp tục được tiêu thụ và giải phóng tài nguyên. Nếu không, kết nối có thể bị "treo".
  4. res.setEncoding('utf8'): Đảm bảo dữ liệu nhận về được mã hóa đúng chuẩn (thường là UTF-8).
  5. res.on('data', (chunk) => { ... }): Dữ liệu từ server về không phải một cục mà "nhỏ giọt" từng "miếng" (chunk). Event data sẽ "nghe ngóng" và gom từng chunk vào biến rawData.
  6. res.on('end', () => { ... }): Khi server đã gửi hết dữ liệu, event end sẽ được kích hoạt. Lúc này, rawData đã chứa toàn bộ dữ liệu. Chúng ta dùng JSON.parse() để "bóc tem" dữ liệu JSON thành object JavaScript dễ dùng hơn.
  7. .on('error', (e) => { ... }): Đây là phần cực kỳ quan trọng để "bắt" các lỗi liên quan đến kết nối mạng hoặc server không phản hồi. "Thợ code" chuyên nghiệp không bao giờ quên xử lý lỗi!

3. Mẹo "hack" để ghi nhớ và dùng thực tế (Best Practices)

  • Luôn luôn xử lý lỗi! Giống như việc bạn không thể bỏ qua đèn đỏ, việc xử lý lỗi (cả HTTP status code và lỗi network) là bắt buộc. Nếu không, ứng dụng của bạn sẽ "sập" không báo trước.
  • Gom data từng "miếng" (chunk): Nhớ rằng dữ liệu về từng chút một. Đừng bao giờ nghĩ nó sẽ về nguyên cục ngay lập tức. Cứ gom lại, đến khi end thì xử lý.
  • "Bóc tem" JSON cẩn thận: Dùng try...catch khi JSON.parse() để tránh ứng dụng "tạch" nếu dữ liệu nhận về không phải JSON hợp lệ.
  • "Nâng cấp" công cụ: Mặc dù http.get() là "gốc rễ" nhưng trong các dự án lớn, anh Creyt thường khuyên dùng các thư viện "xịn xò" hơn như axios hoặc node-fetch. Chúng cung cấp cú pháp gọn gàng hơn, tự động xử lý JSON, có tính năng "interceptors" (chặn yêu cầu/phản hồi) và xử lý lỗi "thông minh" hơn rất nhiều. Coi như http.get() là "xe đạp" để học, còn axios là "ô tô điện" vậy!

4. Ứng dụng thực tế của "Grab Data" này

  • Website "Tin tức tổng hợp": Lấy tin tức từ nhiều nguồn API khác nhau (VnExpress, Reuters, v.v.) để hiển thị trên một trang duy nhất.
  • Ứng dụng "Thời tiết": Gọi API của OpenWeatherMap để hiển thị dự báo thời tiết cho vị trí của bạn.
  • Game "Online": Lấy thông tin người chơi, bảng xếp hạng từ server backend.
  • Microservices: Trong kiến trúc microservices, các dịch vụ nhỏ thường dùng http.get() (hoặc các thư viện tương tự) để "hỏi han" dữ liệu lẫn nhau.

5. Khi nào nên dùng http.get() "nguyên bản" và khi nào nên "lên đời"?

Nên dùng http.get() "nguyên bản" khi:

  • Học tập và nghiên cứu: Khi bạn muốn hiểu sâu "ruột gan" cách HTTP request hoạt động ở cấp độ thấp nhất, http.get() là "giáo trình" tuyệt vời.
  • Dự án siêu nhỏ, không cần dependency: Nếu bạn muốn giữ cho dự án của mình "nhẹ tênh" không cần cài thêm thư viện nào, và yêu cầu HTTP không quá phức tạp.
  • Tạo thư viện HTTP riêng: Nếu bạn đang xây dựng một thư viện HTTP tùy chỉnh, bạn có thể dùng http module làm nền tảng.

Nên "lên đời" dùng axios hoặc node-fetch khi:

  • Dự án thực tế (production): Hầu hết các dự án cần độ tin cậy, dễ bảo trì và nhiều tính năng hơn (như timeout, retry, request/response interceptors).
  • Xử lý JSON thường xuyên: Các thư viện này tự động parse JSON, bạn không cần phải tự gom chunkJSON.parse() nữa.
  • Tương tác với nhiều API khác nhau: Chúng giúp bạn quản lý các request dễ dàng hơn, đặc biệt khi phải gửi nhiều loại request (GET, POST, PUT, DELETE) với nhiều cấu hình khác nhau.

Anh Creyt hy vọng qua bài này, các bạn đã "thấm" được sức mạnh và cách dùng của http.get() trong Node.js. Nhớ nhé, "biết gốc rễ" là quan trọng, nhưng "biết khi nào nên dùng công cụ xịn" còn quan trọng hơn! Giờ thì, "triển" ngay thôi, đừng ngại "bắt tay" vào code!

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!