Best Practices Error Handling di Node.js

Error Handling merupakan cara untuk menemukan suatu error dan dibutuhkan untuk menangani kesalahan yang terjadi selama eksekusi program.

Ketika kita menerapkan error handling maka hal tersebut dapat memungkinkan kita sebagai programmer untuk menangani berbagai jenis kesalahan, seperti kesalahan sintaks, kesalahan runtime, kesalahan logika, atau kesalahan eksternal seperti kegagalan jaringan atau input pengguna yang tidak valid.

Error Handling dapat membantu kita supaya kode yang kita buat dapat lebih aman dan mencegah dari sistem yang crash tidak terduga. Dengan menerapkan error handling yang baik, dapat membuat program/aplikasi kita lebih nyaman digunakan oleh pengguna dan juga membantu meningkatkan produktivitas.

Berikut ini beberapa penanganan error yang bisa kalian terapkan didalam node.js:

  • Menggunakan async/await

Ketika menggunakan kode asynchronous, pastikan kesalahan yang ditangani dengan tepat. Gunakan parameter error sebagai argumen pertama dalam fungsi callback atau menangani error menggunakan .catch() untuk promise guna memastikan bahwa kesalahan yang terjadi dalam operasi asynchronous tidak diabaikan.

const yourFunction = async () => {
  try {
    // Handle the result
  } catch (error) {
    // Handle the error
  }
}
  • Menggunakan Error Objects

Saat throwing atau catching errors, gunakan instance kelas kesalahan bawaan atau perluas untuk membuat jenis kesalahan khusus.

Dengan begitu dapat memungkinkan kita untuk memberikan pesan kesalahan yang bermakna dan informasi tambahan yang dapat membantu dalam proses debug.

Silahkan kalian buat base error nya seperti dibawah ini.

// baseError.js

class BaseError extends Error {
  constructor(name, statusCode, description, isOperational) {
    super(description)

    Object.setPrototypeOf(this, new.target.prototype)
    this.name = name
    this.statusCode = statusCode
    this.isOperational = isOperational
    Error.captureStackTrace(this)
  }
}

module.exports = BaseError

Setelah itu kita akan membuat status codenya seperti berikut.

// httpStatusCodes.js

const httpStatusCodes = {
  OK: 200,
  BAD_REQUEST: 400,
  NOT_FOUND: 404,
  INTERNAL_SERVER: 500,
}

module.exports = httpStatusCodes

Kemudian kalian dapat membuat file http500Error.js dan extend BaseError dengan kesalahan khusus untuk menangani 500.

// http500Error.js

const httpStatusCodes = require("./httpStatusCodes")
const BaseError = require("./baseError")

class HTTP500Error extends BaseError {
  constructor(
    name,
    statusCode = HttpStatusCode.INTERNAL_SERVER,
    isOperational = true,
    description = "internal server error"
  ) {
    super(name, statusCode, isOperational, description)
  }
}

module.exports = HTTP500Error
  • Menggunakan Pendekatan Terpusat

Dengan pendekatan terpusat untuk menangani kesalahan Anda, Anda dapat menghilangkan kemungkinan duplikasi kode.

Kesalahan yang tertangkap ini dapat ditransfer ke middleware. Anda dapat membedakan antara jenis kesalahan dan mengirimkannya ke komponen penanganan kesalahan terpusat tepat di middleware.

app.use((err, req, res, next) => {
  // Handle the error and send an appropriate response
});
  • Menggunakan Unhandled Promise Rejections

Unhandled Promise Rejections dapat menyebabkan aplikasi kita akan berhenti. untuk mencegah hal ini kita dapat menggunakan event unhandledRejection.

event unhandledRejection digunakan untuk menangkap dan menangani penolakan promise yang tidak tertangani secara global di aplikasi Anda.

process.on('unhandledRejection', (reason, promise) => {
  // Handle the rejection
});

Kesimpulan

Sebagai seorang developer pastinya kita pernah mengalami error saat membangun sebuah aplikasi.

Maka dari itu kita semestinya harus berteman dengan error supaya kita juga tahu bagaimana cara menanganinya. Sehingga saat aplikasi kita siap untuk produksi tidak ada lagi error yang muncul.

Jika ada yang ditanyakan silahkan kalian komentar dibawah sini.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top