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.
Contents
- 1 1. Unhandled Promise Rejection
- 2 2. Memory Leak (RAM Naik Terus)
- 3 3. Event Loop Blocking
- 4 4. Tidak Menggunakan Cluster Mode
- 5 5. Database Connection Exhausted
- 6 6. Environment Variable Tidak Terbaca
- 7 7. Error Karena Dependency Update
- 8 8. Logging Terlalu Berat
- 9 9. Tidak Ada Graceful Shutdown
- 10 10. CORS Error di Production
- 11 11. Error SSL & Reverse Proxy
- 12 12. API Timeout dari Service Lain
- 13 13. Rate Limiting Tidak Ada
- 14 14. Error Handling Tidak Konsisten
- 15 15. Tidak Ada Monitoring & Alert
- 16 16. Studi Kasus Nyata
- 17 17. Checklist Anti-Error NodeJS Production
- 18 Kesimpulan
- 19 Related Posts
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
.envterbaca - Set variable via server
- Jangan bergantung pada file lokal
7. Error Karena Dependency Update
Gejala
- App crash setelah deploy
- Fitur rusak
Penyebab
npm installtanpa 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