Dasar HTTP

Penanganan kesalahan

Hasilkan respons error HTTP yang konsisten dan sembunyikan detail internal di produksi.

Beta · v0.2.0API Lanjit masih dapat berubah sebelum versi stabil. Periksa catatan rilis dan panduan peningkatan sebelum memperbarui.

Exception dari handler, controller, middleware, atau layanan diteruskan ke exception renderer yang didaftarkan pada bootstrap/app.js.

Exception HTTP

Gunakan HttpException ketika status dan pesan aman untuk dikirim kepada klien.

import { HttpException } from '../framework/Foundation/Exceptions/HttpException.js';

throw new HttpException(404, 'Post tidak ditemukan.');

Argument ketiga dapat membawa detail terstruktur. ValidationException menggunakan mekanisme ini untuk menghasilkan status 422 dan error per field.

Renderer aplikasi

Skeleton bawaan mengubah exception menjadi JSON:

.withExceptions((exceptions) => {
  exceptions.render((error, request, response) => response.json({
    message: error.status && error.status < 500
      ? error.message
      : (process.env.APP_DEBUG === 'true' ? error.message : 'Server Error'),
    ...(error.details ? { errors: error.details } : {}),
  }, error.status ?? 500));
})

Mode debug

Pastikan APP_DEBUG=false di produksi. Exception internal tanpa status akan dikirim sebagai 500 Server Error, sedangkan pesan detail tetap tersedia selama pengembangan ketika debug aktif.

Logging exception

Renderer dapat mencatat error sebelum mengirim respons. Jangan masukkan kata sandi, token, cookie, atau data pribadi ke context log.

exceptions.render(async (error, request, response) => {
  await app.make('log').error(error.message, {
    method: request.method,
    path: request.path,
  });

  return response.json({ message: 'Server Error' }, error.status ?? 500);
});
Edit halaman ini di GitHub

Ketik untuk mencari di seluruh dokumentasi.