4 Cách Tốt Nhất Để Thực Hiện Yêu Cầu POST Trong Node.js

Học cách thực hiện các yêu cầu POST trong Node.js bằng cách sử dụng mô-đun http tích hợp sẵn và thư viện axios phổ biến. Cũng tìm hiểu cách gửi và nhận dữ liệu ở các định dạng và tình huống khác nhau.

Minh Triết

Minh Triết

5 tháng 6 2025

4 Cách Tốt Nhất Để Thực Hiện Yêu Cầu POST Trong Node.js

Bạn có muốn học cách thực hiện yêu cầu POST trong Node.js không? Nếu có, thì bạn đang ở đúng nơi. Trong bài viết blog này, tôi sẽ chỉ cho bạn cách sử dụng mô-đun http tích hợp sẵn và thư viện phổ biến axios để thực hiện yêu cầu POST trong Node.js. Sau đó, sử dụng Apidog để kiểm tra các yêu cầu POST với giao diện trực quan và chia sẻ chúng với nhóm của bạn.

button

Yêu cầu HTTP POST trong NodeJS là gì?

Một yêu cầu HTTP POST trong Node.js được sử dụng để gửi dữ liệu đến một máy chủ để tạo hoặc cập nhật một tài nguyên. Các yêu cầu POST thường được sử dụng khi gửi dữ liệu biểu mẫu, tải lên tệp hoặc gửi dữ liệu để được lưu trữ trong cơ sở dữ liệu.

Trong Node.js, bạn có thể thực hiện một yêu cầu POST bằng cách sử dụng mô-đun http tích hợp sẵn hoặc một thư viện bên thứ ba như Axios. Dữ liệu sẽ được gửi kèm theo yêu cầu được bao gồm trong thân yêu cầu. Máy chủ sau đó có thể truy cập và xử lý dữ liệu này để thực hiện hành động mong muốn.

Node.js cung cấp mô hình I/O không chặn, dựa trên sự kiện, giúp nó hiệu quả cho việc xử lý các ứng dụng tập trung vào dữ liệu và thời gian thực. Khả năng xử lý yêu cầu POST và xử lý dữ liệu của nó khiến nó trở thành lựa chọn phổ biến để xây dựng API web, ứng dụng chat thời gian thực và các loại ứng dụng máy chủ khác.

NodeJs Website

Cách gửi yêu cầu POST trong Node.js?

Bây giờ, chúng tôi sẽ chỉ cho bạn một số phương pháp để gửi và thực hiện các yêu cầu POST trong Node.js, bao gồm mô-đun HTTP và thư viện Axios. Bạn có thể chọn cách tiếp cận phù hợp nhất với yêu cầu và sở thích dự án của bạn.

1. Gửi yêu cầu POST trong Node.js bằng mô-đun http

Node.js thường được sử dụng để tạo máy chủ web, ứng dụng web và API web. Node.js cũng cung cấp một mô-đun http tích hợp sẵn cho phép bạn thực hiện các yêu cầu và phản hồi HTTP.

Để thực hiện một yêu cầu POST trong Node.js bằng mô-đun http, bạn cần tuân theo các bước sau:

  1. Nhập mô-đun http bằng cách sử dụng hàm require.
  2. Tạo một đối tượng options chứa thông tin về yêu cầu POST, chẳng hạn như tên máy chủ, cổng, đường dẫn, phương thức, tiêu đề và dữ liệu.
  3. Sử dụng phương thức http.request để tạo một đối tượng yêu cầu, truyền đối tượng options làm tham số đầu tiên và một hàm callback làm tham số thứ hai. Hàm callback sẽ được thực thi khi phản hồi được nhận và nó sẽ có một đối tượng response làm tham số.
  4. Sử dụng đối tượng request để gửi dữ liệu và kết thúc yêu cầu. Đối tượng request là một thể hiện của lớp http.ClientRequest, lớp này triển khai giao diện WritableStream. Điều này có nghĩa là bạn có thể sử dụng đối tượng request như một dòng dữ liệu và ghi dữ liệu vào nó bằng cách sử dụng phương thức request.write. Bạn cũng có thể sử dụng phương thức request.end để báo hiệu kết thúc dữ liệu và yêu cầu. Bạn cũng có thể lắng nghe các sự kiện như errortimeout trên đối tượng request và xử lý chúng tương ứng.
  5. Sử dụng đối tượng response để xử lý dữ liệu và tiêu đề phản hồi. Đối tượng response là một thể hiện của lớp http.IncomingMessage, lớp này triển khai giao diện ReadableStream. Điều này có nghĩa là bạn có thể sử dụng đối tượng response như một dòng dữ liệu và lắng nghe các sự kiện như data, end, và error. Bạn cũng có thể sử dụng thuộc tính response.statusCode để lấy mã trạng thái của phản hồi, và thuộc tính response.headers để lấy các tiêu đề của phản hồi.
  6. Sử dụng phương thức response.on để đăng ký các trình lắng nghe sự kiện cho đối tượng response. Ví dụ, bạn có thể sử dụng phương thức response.on('data', callback) để lắng nghe sự kiện data, sự kiện này sẽ được phát ra khi một đoạn dữ liệu được nhận. Hàm callback sẽ có một đối tượng chunk làm tham số, đối tượng này là một bộ đệm dữ liệu. Bạn có thể sử dụng phương thức chunk.toString() để chuyển đổi bộ đệm thành một chuỗi và nối nó với một biến để lưu trữ toàn bộ dữ liệu phản hồi. Bạn cũng có thể sử dụng phương thức response.on('end', callback) để lắng nghe sự kiện end, sự kiện này sẽ được phát ra khi phản hồi hoàn thành. Hàm callback sẽ không có tham số nào, và bạn có thể sử dụng nó để thực hiện bất kỳ hành động cuối cùng nào, chẳng hạn như ghi log hoặc phân tích dữ liệu phản hồi. Bạn cũng có thể sử dụng phương thức response.on('error', callback) để lắng nghe sự kiện error, sự kiện này sẽ được phát ra khi có lỗi xảy ra trong quá trình phản hồi. Hàm callback sẽ có một đối tượng error làm tham số và bạn có thể sử dụng nó để xử lý lỗi, chẳng hạn như ghi log hoặc ném nó ra.

Dưới đây là một ví dụ về cách thực hiện một yêu cầu POST trong Node.js bằng mô-đun http:

// Nhập mô-đun http
const http = require('http');

// Tạo một đối tượng options
const options = {
  hostname: 'jsonplaceholder.typicode.com',
  port: 80,
  path: '/posts',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'User-Agent': 'Node.js'
  }
};

// Tạo một đối tượng dữ liệu
const data = {
  title: 'Xin chào, thế giới!',
  body: 'Đây là một bài kiểm tra bài viết',
  userId: 1
};

// Chuyển đổi đối tượng dữ liệu thành chuỗi
const dataString = JSON.stringify(data);

// Cập nhật đối tượng options với độ dài dữ liệu
options.headers['Content-Length'] = dataString.length;

// Tạo một đối tượng yêu cầu
const request = http.request(options, (response) => {
  // Khởi tạo một biến để lưu trữ dữ liệu phản hồi
  let data = '';

  // Lắng nghe sự kiện dữ liệu
  response.on('data', (chunk) => {
    // Nối đoạn dữ liệu vào biến dữ liệu
    data += chunk.toString();
  });

  // Lắng nghe sự kiện kết thúc
  response.on('end', () => {
    // Ghi log mã trạng thái và các tiêu đề
    console.log(`Mã trạng thái: ${response.statusCode}`);
    console.log(`Tiêu đề: ${JSON.stringify(response.headers)}`);

    // Phân tích dữ liệu dưới dạng JSON
    const post = JSON.parse(data);

    // Ghi log thông tin bài viết
    console.log(`ID bài viết: ${post.id}`);
    console.log(`Tiêu đề bài viết: ${post.title}`);
    console.log(`Nội dung bài viết: ${post.body}`);
    console.log(`ID người dùng bài viết: ${post.userId}`);
  });

  // Lắng nghe sự kiện lỗi
  response.on('error', (error) => {
    // Ném lỗi
    throw error;
  });
});

// Ghi dữ liệu vào đối tượng yêu cầu
request.write(dataString);

// Kết thúc đối tượng yêu cầu
request.end();

2. Thực hiện yêu cầu POST trong Node.js bằng thư viện axios

Mô-đun http là một mô-đun cấp thấp cung cấp chức năng cơ bản để thực hiện các yêu cầu và phản hồi HTTP. Tuy nhiên, nếu bạn muốn sử dụng một mô-đun cấp cao hơn và thân thiện hơn với người dùng, bạn có thể sử dụng thư viện axios. Axios là một thư viện phổ biến và mạnh mẽ cho phép bạn thực hiện các yêu cầu HTTP và xử lý phản hồi bằng cách sử dụng promises và cú pháp async/await. Axios cũng hỗ trợ các tính năng như bộ kiểm tra, bộ chuyển đổi, thời gian chờ, mã hủy và nhiều hơn nữa.

Để thực hiện một yêu cầu POST trong Node.js bằng thư viện axios, bạn cần tuân theo các bước sau:

  1. Cài đặt thư viện axios bằng lệnh npm: npm install axios.
  2. Nhập thư viện axios bằng cách sử dụng hàm require.
  3. Sử dụng phương thức axios.post để thực hiện yêu cầu POST, truyền URL của tài nguyên dưới dạng tham số đầu tiên và đối tượng dữ liệu dưới dạng tham số thứ hai. Bạn cũng có thể truyền một đối tượng config tùy chọn làm tham số thứ ba, đối tượng này có thể chứa thông tin về yêu cầu POST, chẳng hạn như tiêu đề, tham số, thời gian chờ và nhiều hơn nữa. Phương thức axios.post sẽ trả về một promise, promise này sẽ được giải quyết thành một đối tượng response hoặc bị từ chối thành một đối tượng error.
  4. Sử dụng phương thức catch để xử lý promise bị từ chối, truyền một hàm callback làm tham số đầu tiên. Hàm callback sẽ có một đối tượng error làm tham số, chứa thông điệp lỗi, mã lỗi, yêu cầu và phản hồi. Bạn có thể sử dụng thuộc tính error.response để truy cập đối tượng phản hồi, và thuộc tính error.request để truy cập đối tượng yêu cầu.
  5. Hoặc, bạn có thể sử dụng cú pháp async/await để thực hiện yêu cầu POST và xử lý phản hồi. Để thực hiện việc này, bạn cần sử dụng từ khóa async trước hàm chứa yêu cầu POST và từ khóa await trước phương thức axios.post. Điều này sẽ cho phép bạn viết mã bất đồng bộ theo cách đồng bộ và gán đối tượng response cho một biến. Bạn có thể sử dụng khối try/catch để xử lý bất kỳ lỗi nào có thể xảy ra trong quá trình thực hiện yêu cầu POST.

Dưới đây là một ví dụ về cách thực hiện yêu cầu POST trong Node.js bằng thư viện axios:

// Nhập thư viện axios
const axios = require('axios');

// Tạo một đối tượng dữ liệu
const data = {
  title: 'Xin chào, thế giới!',
  body: 'Đây là một bài kiểm tra bài viết',
  userId: 1
};

// Thực hiện yêu cầu POST sử dụng phương thức then
axios.post('http://jsonplaceholder.typicode.com/posts', data, {
  headers: {
    'Content-Type': 'application/json',
    'User-Agent': 'Node.js'
  }
}).then((response) => {
  // Ghi log mã trạng thái và các tiêu đề
  console.log(`Mã trạng thái: ${response.status}`);
  console.log(`Tiêu đề: ${JSON.stringify(response.headers)}`);

  // Ghi log thông tin bài viết
  console.log(`ID bài viết: ${response.data.id}`);
  console.log(`Tiêu đề bài viết: ${response.data.title}`);
  console.log(`Nội dung bài viết: ${response.data.body}`);
  console.log(`ID người dùng bài viết: ${response.data.userId}`);
}).catch((error) => {
  // Ghi log thông điệp và mã lỗi
  console.log(`Thông điệp lỗi: ${error.message}`);
  console.log(`Mã lỗi: ${error.code}`);

  // Ghi log trạng thái phản hồi và dữ liệu nếu có
  if (error.response) {
    console.log(`Trạng thái phản hồi: ${error.response.status}`);
    console.log(`Dữ liệu phản hồi: ${JSON.stringify(error.response.data)}`);
  }

  // Ghi log phương thức và đường dẫn yêu cầu nếu có
  if (error.request) {
    console.log(`Phương thức yêu cầu: ${error.request.method}`);
    console.log(`Đường dẫn yêu cầu: ${error.request.path}`);
  }
});

// Thực hiện yêu cầu POST bằng cú pháp async/await
async function createPost() {
  try {
    // Chờ yêu cầu POST và gán đối tượng phản hồi cho một biến
    const response = await axios.post('http://jsonplaceholder.typicode.com/posts', data, {
      headers: {
        'Content-Type': 'application/json',
        'User-Agent': 'Node.js'
      }
    });

    // Ghi log mã trạng thái và các tiêu đề
    console.log(`Mã trạng thái: ${response.status}`);
    console.log(`Tiêu đề: ${JSON.stringify(response.headers)}`);

    // Ghi log thông tin bài viết
    console.log(`ID bài viết: ${response.data.id}`);
    console.log(`Tiêu đề bài viết: ${response.data.title}`);
    console.log(`Nội dung bài viết: ${response.data.body}`);
    console.log(`ID người dùng bài viết: ${response.data.userId}`);
  } catch (error) {
    // Ghi log thông điệp và mã lỗi
    console.log(`Thông điệp lỗi: ${error.message}`);
    console.log(`Mã lỗi: ${error.code}`);

    // Ghi log trạng thái phản hồi và dữ liệu nếu có
    if (error.response) {
      console.log(`Trạng thái phản hồi: ${error.response.status}`);
      console.log(`Dữ liệu phản hồi: ${JSON.stringify(error.response.data)}`);
    }

    // Ghi log phương thức và đường dẫn yêu cầu nếu có
    if (error.request) {
      console.log(`Phương thức yêu cầu: ${error.request.method}`);
      console.log(`Đường dẫn yêu cầu: ${error.request.path}`);
    }
  }
}

// Gọi hàm createPost
createPost();

3. Gửi và nhận dữ liệu trong Node.js

Gửi và nhận dữ liệu trong Node.js liên quan đến một vài bước chính. Khi bạn gửi một yêu cầu POST trong Node.js, bạn thường muốn gửi một số dữ liệu đến máy chủ web và nhận được phản hồi. Ví dụ, bạn có thể muốn gửi thông tin người dùng để tạo một tài khoản mới và nhận được thông điệp xác nhận hoặc mã thông báo. Hoặc, bạn có thể gửi dữ liệu tệp để tải lên một tệp và nhận lại một URL tệp hoặc thông điệp trạng thái.

Để xử lý các loại dữ liệu khác nhau, bạn sẽ cần các phương pháp và mô-đun khác nhau:

  1. Dữ liệu JSON: Nếu dữ liệu của bạn là một đối tượng hoặc mảng đơn giản, bạn có thể chuyển đổi nó thành một chuỗi JSON bằng cách sử dụng JSON.stringify(). Phương pháp này tạo ra một chuỗi với các cặp khóa-giá trị và các mảng, giúp dễ dàng gửi và nhận dữ liệu. Để làm việc với các phản hồi JSON, bạn có thể sử dụng JSON.parse() để chuyển đổi phản hồi trở lại thành một đối tượng hoặc mảng JavaScript.
  2. Dữ liệu tệp: Khi xử lý với các tệp, bạn có thể sử dụng thư viện form-data để tạo một đối tượng dữ liệu biểu mẫu và thêm tệp vào đó. Thư viện này mô phỏng hành vi của biểu mẫu HTML, cho phép bạn gửi dữ liệu văn bản và tệp. Bạn sẽ cần cài đặt thư viện form-data với npm và sau đó sử dụng nó để tạo và gửi đối tượng dữ liệu biểu mẫu.
  3. Các luồng: Đối với dữ liệu luồng, bạn có thể sử dụng mô-đun stream tích hợp sẵn. Các luồng cho phép bạn xử lý dữ liệu lớn hoặc liên tục mà không cần tải tất cả vào bộ nhớ.

Bạn có thể tạo ra các luồng có thể đọc, có thể ghi, hoặc chuyển đổi tùy thuộc vào nhu cầu của bạn. Các luồng rất hữu ích cho việc xử lý âm thanh, video, hoặc dữ liệu mạng, và bạn có thể dẫn dữ liệu từ một luồng này sang luồng khác để xử lý hoặc gửi đến máy chủ.

4. Sử dụng Apidog để kiểm tra yêu cầu POST NodeJs của bạn

Apidog là một công cụ mạnh mẽ để kiểm tra API. Nó cho phép bạn tạo và lưu các yêu cầu API, tổ chức chúng thành các bộ sưu tập, và chia sẻ chúng với nhóm của bạn.

button

Dưới đây là cách bạn có thể sử dụng Apidog để kiểm tra yêu cầu POST của bạn:

  1. Mở Apidog và tạo một yêu cầu mới.
Select new request

2. Đặt phương thức yêu cầu thành POST.

Select Post request

3. Nhập URL của tài nguyên bạn muốn cập nhật. Thêm bất kỳ tiêu đề hoặc tham số bổ sung nào bạn muốn bao gồm, sau đó nhấn nút “Gửi” để gửi yêu cầu.

4. Xác minh rằng phản hồi là những gì bạn mong đợi.

Verify the response

Kết luận

Trong bài viết blog này, tôi đã chỉ cho bạn cách thực hiện các yêu cầu POST trong Node.js bằng cách sử dụng mô-đun http và thư viện axios. Tôi cũng đã chỉ cho bạn cách gửi và nhận dữ liệu trong các định dạng và kịch bản khác nhau. Tôi hy vọng bạn đã học được điều gì đó hữu ích và thích đọc bài viết này.

button

Thực hành thiết kế API trong Apidog

Khám phá cách dễ dàng hơn để xây dựng và sử dụng API