Error Umum NodeJS di Production Server: Penyebab, Dampak, dan Solusi Nyata

Error Umum NodeJS di Production Server: Penyebab, Dampak, dan Solusi Nyata

Aplikasi NodeJS sering berjalan mulus di lokal dan staging, tetapi mulai bermasalah saat masuk ke production.

Banyak downtime, error misterius, dan performa buruk sebenarnya berasal dari kesalahan umum yang terus berulang.

Error di production biasanya lebih berbahaya karena:

  • Terjadi saat traffic tinggi
  • Sulit direproduksi
  • Berdampak langsung ke bisnis
  • Bisa menyebabkan data loss

Artikel ini membahas error paling umum NodeJS di production server, lengkap dengan penyebab, contoh nyata, dan solusi yang terbukti di lapangan.


1. Unhandled Promise Rejection

Gejala

  • App crash tiba-tiba
  • Error muncul tanpa stack trace jelas

Contoh Error

app.get('/user', async (req, res) => {
  const user = await db.getUser(req.query.id);
  res.json(user);
});

Jika db.getUser() error → crash.


Solusi

app.get('/user', async (req, res, next) => {
  try {
    const user = await db.getUser(req.query.id);
    res.json(user);
  } catch (err) {
    next(err);
  }
});

Tambahkan global handler:

process.on('unhandledRejection', err => {
  console.error(err);
});

2. Memory Leak (RAM Naik Terus)

Gejala

  • RAM terus naik
  • PM2 restart berulang
  • Server swap

Penyebab Umum

const cache = [];

app.post('/log', (req, res) => {
  cache.push(req.body);
});

Solusi

  • Gunakan Redis
  • Batasi cache
  • Monitor heap

PM2 safeguard:

pm2 start app.js --max-memory-restart 2G

3. Event Loop Blocking

Gejala

  • API lambat
  • CPU 100%
  • Semua endpoint ikut lambat

Contoh Salah

app.get('/export', () => {
  generateLargeFile();
});

Solusi

  • Worker thread
  • Background job
  • Queue

4. Tidak Menggunakan Cluster Mode

Gejala

  • CPU hanya 1 core aktif
  • Scaling VPS tidak berdampak

Solusi

pm2 start app.js -i max

5. Database Connection Exhausted

Gejala

  • Error: Too many connections
  • API timeout

Penyebab

  • Koneksi DB per request
  • Tidak pakai pool

Solusi

createPool({ connectionLimit: 20 });

6. Environment Variable Tidak Terbaca

Gejala

  • App jalan di lokal, gagal di production
  • Error config undefined

Solusi

  • Pastikan .env terbaca
  • Set variable via server
  • Jangan bergantung pada file lokal

7. Error Karena Dependency Update

Gejala

  • App crash setelah deploy
  • Fitur rusak

Penyebab

  • npm install tanpa lock version

Solusi

  • Gunakan package-lock.json
  • Audit dependency

8. Logging Terlalu Berat

Gejala

  • Disk penuh
  • API melambat

Solusi

  • Async logging
  • Rotasi log
  • Centralized logging

9. Tidak Ada Graceful Shutdown

Gejala

  • Request terputus saat deploy
  • Data tidak konsisten

Solusi

process.on('SIGTERM', () => {
  server.close(() => process.exit(0));
});

10. CORS Error di Production

Gejala

  • API bisa diakses lokal
  • Gagal di browser production

Solusi

  • Set origin spesifik
  • Jangan wildcard

11. Error SSL & Reverse Proxy

Gejala

  • Infinite redirect
  • Header salah

Solusi

  • Pastikan trust proxy
  • Konfigurasi Nginx benar

12. API Timeout dari Service Lain

Gejala

  • Request menggantung
  • Thread penuh

Solusi

  • Timeout
  • Retry
  • Circuit breaker

13. Rate Limiting Tidak Ada

Gejala

  • API overload
  • Brute force

Solusi

  • Implement rate limit
  • Batasi endpoint sensitif

14. Error Handling Tidak Konsisten

Gejala

  • Response tidak seragam
  • Sulit debug

Solusi

  • Centralized error handler
  • Standard error response

15. Tidak Ada Monitoring & Alert

Gejala

  • Error diketahui dari user
  • Downtime lama

Solusi

  • Monitoring CPU/RAM
  • Error alert
  • Log analysis

16. Studi Kasus Nyata

Masalah

  • API down saat jam sibuk
  • Tidak ada error jelas

Root Cause

  • Event loop blocking + memory leak

Solusi

  • Worker thread
  • Redis cache
  • PM2 cluster

Hasil

  • Stabil di peak traffic

17. Checklist Anti-Error NodeJS Production

✅ Try-catch async
✅ Cluster mode
✅ DB pooling
✅ Async logging
✅ Graceful shutdown
✅ Rate limit
✅ Monitoring
✅ Lock dependency


Kesimpulan

Sebagian besar error NodeJS di production:

  • Bukan bug kompleks
  • Bukan karena NodeJS
  • Tapi karena konfigurasi & disiplin engineering

Production error bisa dicegah jika dipelajari dari pola yang sama.

Dengan mengenali error umum ini, Anda bisa:

  • Mengurangi downtime
  • Menghemat biaya
  • Meningkatkan kepercayaan user