| Debug & test Webhook / WebSocket trong Node.js chuyên nghiệp

Được viết bởi thanhdt vào ngày 28/01/2026 lúc 00:01 | 31 lượt xem

Xây dựng hệ thống Realtime là một chuyện, nhưng đảm bảo nó hoạt động ổn định và dễ dàng tìm lỗi khi có sự cố lại là một câu chuyện khác. Do tính chất bất đồng bộ và kết nối mở, việc Debug Webhook và WebSocket thường khó khăn hơn so với REST API thông thường.

Bạn đã bao giờ gặp tình trạng Webhook không gửi đến, hoặc kết nối WebSocket bị ngắt quãng mà không biết tại sao? Bài viết này sẽ cung cấp cho bạn bộ công cụ và quy trình Debug & Test chuẩn chuyên gia để làm chủ mọi tình huống.

Loại lỗi Công cụ Debug Phương pháp kiểm thử
Webhook mất tin [Xử trị Log tập trung] Gửi Request giả lập bằng Postman/Curl
Websocket ngắt kết nối [Network Tab – WS] Kiểm thử tải (Load Test) với artillery
Logic xử lý sai [VS Code Debugger] Unit Test với Jest & Supertest

1. Kiểm thử Webhook bằng Postman và Log hệ thống

Vì Webhook được kích hoạt từ một server bên ngoài, bước đầu tiên để Debug là giả lập request đó ngay tại Local.

Các bước thực hiện:

  • Bước 1: Sử dụng Postman để gửi một lệnh POST kèm Body JSON giống hệt mẫu Webhook của nhà cung cấp.
  • Bước 2: Kiểm tra Log server. Đừng chỉ dùng console.log. Hãy xây dựng một hệ thống Log chi tiết kèm Timestamp và Request ID.

Kiến trúc hệ thống Logging và theo dõi lỗi Webhook

2. Debug kết nối WebSocket trên trình duyệt

Để biết tại sao tin nhắn không đến được Client, hãy tận dụng sức mạnh của Chrome DevTools:
1. F12 -> Tab Network.
2. Chọn bộ lọc WS (WebSockets).
3. Nhấn vào kết nối đang chạy. Tab Messages sẽ hiển thị mọi “gói tin” đi ra và đi vào theo thời gian thực.

Nếu bạn thấy một gói tin gửi đi nhưng không có phản hồi, vấn đề nằm ở logic xử lý tại Server.

3. Viết Unit Test với Jest cho Webhook

Đừng đợi đến khi deploy mới test lỗi. Hãy sử dụng JestSupertest để tự động hóa việc kiểm tra logic nhận Webhook.

const request = require('supertest');
const app = require('./app');

describe('POST /webhook', () => {
  it('nên trả về 200 nếu signature hợp lệ', async () => {
    const res = await request(app)
      .post('/webhook')
      .set('X-Hub-Signature', 'valid_signature')
      .send({ event: 'test' });

    expect(res.statusCode).toEqual(200);
  });

  it('nên trả về 401 nếu thiếu signature', async () => {
    const res = await request(app)
      .post('/webhook')
      .send({ event: 'test' });

    expect(res.statusCode).toEqual(401);
  });
});

4. Các lỗi thường gặp và cách khắc phục

  • CORS Error: Đảm bảo bạn đã cấu hình cors trên server Socket.IO để cho phép Domain của Client kết nối.
  • Handshake Failed: Thường do Header không khớp hoặc Proxy (như Nginx) chưa được cấu hình Upgrade: websocket.
  • Memory Leak: Luôn nhớ giải phóng các Event Listener (socket.off) khi Client ngắt kết nối để tránh tràn bộ nhớ.

Việc Debug và Test giúp ứng dụng của bạn trở nên “đao thương bất nhập”. Bước cuối cùng là tổng kết lại kiến thức để biết khi nào nên chọn vũ khí nào cho phù hợp.

Bài cuối cùng: Khi nào nên dùng Webhook, khi nào nên dùng WebSocket? (Checklist quyết định).

Xem lại bài viết quan trọng: WebSocket là gì? So sánh chi tiết với Webhook và REST API


💡 Bạn muốn học cách Debug logic bot trading cực nhanh để không bỏ lỡ cơ hội thị trường?
Khám phá bí kíp tại: Phân tích kỹ thuật & Chiến lược xu hướng VIP