Handling Error di Express.js: Contoh Best Practice untuk Aplikasi yang Lebih Stabil

Handling Error di Express.js: Contoh Best Practice untuk Aplikasi yang Lebih Stabil

2025-06-09

Dalam dunia pemrograman, error atau kesalahan adalah hal yang wajar dan pasti terjadi. Namun, yang paling penting adalah bagaimana kita menangani error tersebut agar aplikasi tidak crash, user tetap mendapatkan pengalaman yang baik, dan pengembang bisa dengan mudah mengetahui serta memperbaiki masalah.

Di artikel ini, kita akan membahas best practice handling error di Express.js lengkap dengan contoh kode yang bisa kamu langsung terapkan di project backend Node.js-mu.


Kenapa Error Handling itu Penting?

Tanpa penanganan error yang tepat, sebuah error kecil bisa membuat aplikasi berhenti berfungsi (crash), menyebabkan downtime, dan membuat pengguna frustrasi. Dengan sistem error handling yang baik, kita bisa:

  • Menghindari crash aplikasi secara mendadak
  • Memberikan pesan error yang jelas dan ramah pengguna
  • Membantu developer cepat menemukan sumber masalah
  • Menjaga keamanan aplikasi dengan tidak membocorkan informasi sensitif

Gunakan Middleware Error Handler di Express.js

Express menyediakan mekanisme khusus untuk menangani error melalui middleware yang memiliki empat parameter: (err, req, res, next).

Berikut contoh middleware error handler sederhana:

app.use((err, req, res, next) => {
  console.error(err.stack); // Log stack trace error ke console
  res.status(500).send({ message: 'Ada masalah server nih!' }); // Kirim response error ke client
});

Middleware ini wajib diletakkan paling akhir di file server.js atau app.js setelah semua route dan middleware lainnya.


Pisahkan Error Berdasarkan Jenisnya

Tidak semua error sama. Penting untuk membedakan error yang berasal dari client dan error yang berasal dari server:

Jenis Error Contoh Status HTTP Keterangan
Client Error (400) Data tidak valid, input salah 400 Kesalahan dari sisi user/input
Server Error (500) Database down, server crash 500 Masalah di server/backend

Dengan membedakan status ini, user tahu bahwa kesalahan ada di pihak mereka (misal input salah), atau server yang bermasalah.


Tangkap Error di Fungsi Async/Await

Ketika menggunakan async/await di Express route handler, kita harus pakai blok try...catch untuk menangkap error dan meneruskannya ke middleware error handler dengan next(err).

Contoh:

app.get('/users/:id', async (req, res, next) => {
  try {
    const user = await User.findById(req.params.id);
    if (!user) {
      // Buat error dengan status khusus
      const error = new Error('User tidak ditemukan');
      error.status = 404;
      throw error;
    }
    res.send(user);
  } catch (err) {
    next(err); // Teruskan error ke middleware error handler
  }
});

Middleware Error Handler dengan Respons Status Dinamis

Supaya lebih fleksibel, middleware error handler bisa mengirim status yang berbeda sesuai error yang diterima:

app.use((err, req, res, next) => {
  console.error(err.stack);
  const status = err.status || 500; // Pakai status error jika ada, default 500
  res.status(status).send({ message: err.message || 'Ada masalah server nih!' });
});

Logging dan Monitoring Error: Kunci Perbaikan Berkelanjutan

Selain menampilkan error ke user, sangat disarankan untuk menyimpan log error ke file atau menggunakan layanan monitoring seperti Sentry, Loggly, atau Papertrail.

Keuntungan monitoring error:

  • Dapat notifikasi real-time jika terjadi error kritis
  • Bisa menganalisis pola error untuk meningkatkan aplikasi
  • Mempermudah debugging di production environment

Kesimpulan

Handling error yang baik sangat penting untuk menjaga stabilitas aplikasi dan kualitas pengalaman user. Berikut ringkasan best practice handling error di Express.js:

  1. Gunakan middleware error handler dengan 4 parameter
  2. Pisahkan error client dan server dengan status HTTP yang tepat
  3. Tangkap error di route async dengan try...catch dan teruskan dengan next(err)
  4. Gunakan logging dan monitoring untuk memantau error di produksi

Dengan pola error handling ini, aplikasi backend kamu akan lebih tangguh dan mudah dikelola. Mau belajar lebih banyak soal backend Node.js? Yuk, ikuti kelas dan bootcamp coding di Nusacodes dengan modul terarah yang siap bikin kamu jadi lebih paham soal Backend!