| Hướng dẫn tạo Webhook server với Node.js & Express: Cực kỳ đơn giản

Được viết bởi thanhdt vào ngày 27/01/2026 lúc 23:26 | 32 lượt xem

Bạn đã hiểu Webhook là gì và sức mạnh của nó. Giờ là lúc chúng ta xắn tay áo lên và cùng nhau xây dựng một Webhook server thực sự bằng Node.jsExpress.

Việc tạo ra một Endpoint có khả năng nhận, xử lý và phản hồi dữ liệu tức thời là bước đầu tiên để bạn làm chủ các hệ thống tự động hóa. Trong bài viết này, tôi sẽ hướng dẫn bạn từng bước từ cấu trúc thư mục đến cách test webhook chuyên nghiệp.

Cấu trúc dự án Mô tả
app.js File chạy chính của server Express
package.json Quản lý thư viện (Express)
/logs Thư mục lưu trữ lịch sử Webhook (tùy chọn)

1. Khởi tạo dự án & Cài đặt môi trường

Đầu tiên, hãy tạo một thư mục mới và khởi tạo dự án Node.js:

mkdir node-webhook-server
cd node-webhook-server
npm init -y
npm install express

2. Xây dựng logic nhận dữ liệu Webhook

Mọi Webhook server đều hoạt động dựa trên phương thức POST. Dữ liệu từ bên ngoài (thường là JSON) sẽ được gửi tới Endpoint mà chúng ta định nghĩa.

Hãy tạo file app.js với nội dung sau:

const express = require('express');
const app = express();

// Middleware cực kỳ quan trọng để đọc body JSON
app.use(express.json());

// Endpoint chính để nhận Webhook
app.post('/webhook', (req, res) => {
  const payload = req.body;

  // 1. Log dữ liệu để kiểm tra
  console.log('--- Đã nhận Webhook mới ---');
  console.log('Event Type:', payload.event);
  console.log('Data:', JSON.stringify(payload, null, 2));

  // 2. Xử lý logic nghiệp vụ
  if (payload.event === 'order_completed') {
    console.log('Xử lý đơn hàng ID:', payload.order_id);
  }

  // 3. Phản hồi HTTP 200 sớm cho Source (rất quan trọng)
  res.status(200).send('OK');
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server đang chạy tại http://localhost:${PORT}/webhook`);
});

[!IMPORTANT]
Hãy luôn phản hồi HTTP 200 (hoặc 2xx) ngay lập tức. Một số Source (như TradingView hay Stripe) sẽ liên tục gửi lại Webhook (Retry) nếu nó không nhận được phản hồi OK trong thời gian ngắn, gây quá tải server của bạn.

3. Test Webhook server bằng Postman

Vì server đang chạy ở Local, bạn có thể dễ dàng dùng Postman để giả lập các request giống hệt như thế giới thực gửi tới.

Giả lập gửi Webhook request từ Postman

  • Method: POST
  • URL: http://localhost:3000/webhook
  • Body: Chọn raw và định dạng JSON.
  • Payload ví dụ:
    json
    {
    "event": "order_completed",
    "order_id": 12345,
    "amount": 500,
    "currency": "USD"
    }

Khi nhấn Send, bạn sẽ thấy thông tin Webhook hiện ra trong Terminal của Node.js.

4. Best Practices khi nhận Webhook

  1. Validate dữ liệu: Luôn kiểm tra xem cấu trúc JSON nhận được có đúng không.
  2. Xử lý bất đồng bộ: Nếu logic xử lý tốn thời gian (ví dụ: render video), hãy đưa nó vào một Queue (hàng đợi) và trả về 200 OK cho Source trước.
  3. Bảo mật: Hiện tại server đang “mở cửa” cho tất cả mọi người. Trong bài viết sau, chúng ta sẽ học cách bảo vệ nó.

Chúc mừng bạn đã tạo thành công Webhook server đầu tiên! Nhưng hãy cẩn thận, nếu một kẻ xấu gửi request giả tới endpoint này, hệ thống của bạn sẽ gặp nguy hiểm.

Bài tiếp theo: Bảo mật Webhook trong Node.js (Signature, Secret & IP Whitelist).

👉 Bảo mật Webhook trong Node.js: Signature, Secret & IP Whitelist


💡 Bạn muốn ứng dụng Webhook để nhận tín hiệu giao dịch từ TradingView?
Tham khảo ngay: Chiến lược xu hướng VIP – Tối ưu hóa lợi nhuận tự động