lifelong learner — urip iku urup, currently working on accenture.

Express error handling : 404 (page not found)

0
Degananda.com -

Error Handling yaitu salah satu bentuk penanganan kesalahan pada kondisi tertentu. Dengan adanya error handling ini maka setiap ada error , maka eksekusi program tidak akan dihentikan secara tiba-tiba, tetapi akan diteruskan ke bagian untuk menangani error tersebut.

Melakukan handling error pada aplikasi yang dibangun dengan menggunakan express sangatlah penting. Baik untuk aplikasi web ataupun hanya sekedar suatu web services. Error yang tidak terhandle akan menyebabkan nodejs crash dan dapat membuat aplikasi tersebut tidak dapat diakses. Namun dengan error handling yang baik meski terjadi crash , aplikasi tetap dapat berjalan pada bagian yang tidak mengelami error. Tentunnya error pada aplikasi tidak terjadi secara keseluruhan melainkan secara partial.

Basic error handling

untuk mendemokan error handling kita akan memulainya dengan menggunakan aplikasi express sederhana dengan basic http get.


var express = require('express');
var port = process.env.port || 7250;
var app = express();

app.get('/', function(req, res){
res.send('hello world');
})

app.listen(port, function(err){
console.log('app running on' + port);
})

script diatas ketika dijalankan pada browser (localhost:7250) akan menghasilkan seperti gambar dibawah ini :

bentuk error yang pertama adalah bagaimana ketika kita mengakses suatu endpoint yang belum didefinisikan. Coba untuk mengakses localhost:7250/degananda , maka akan muncul hasil seperti dibawah ini.

Error diatas muncul dikarenakan tidak ada endpoint untuk GET /degananda. Secara umum hal seperti ini akan menghasilkan status 404 (page not found). Sehingga error handling yang paling proper adalah menyediakan satu halaman khusus untuk mengatakan bahwa halaman tersebut tidak ditemukan. Kita dapat memanfaatkan middleware untuk menangani kasus tersebut.

sebelumnya kita harus mengerti mekanisme routing pada express. Contohnya pada kode dibawah ini.


app.get('/', function(req, res){
  console.log('dega');
  res.send('hello world');
})

app.get('*', function(req, res, next) {
  var err = new Error();
  err.status = 404;
  next(err);
});

app.get(‘/’) bearti express akan menghandle route ke endpoint / atau localhost. Sedangkan app.get(“*”) express akan menghandle seluruh route yang diakses dengan menggunakan http get. Namun karena app.get(‘/’) ditulis diatas app.get(‘*) maka ketika suatu route telah MATCH dengan app.get(‘/’) maka app.get(‘*) tidak akan dieksekusi. Oleh karena itu untuk menghandle error 404 maka kita akan membuat error pada app.get(‘*’) dan ditulis setelah route-route yang ada pada aplikasi kita.

sekarang saat kita membuka error yang tidak ada pada route maka akan muncul pesan “404 page not found”. Untuk membuat hal tersebut kita akan menggunakan middleware.


app.get('*', function(req, res, next) {
  var err = new Error();
  err.status = 404;
  next(err);
});

terdapat dua jenis middleware yang pertama adalah middleware untuk routing memiliki tiga buah parameter yakni req, res dan next. Sedangkan middleware untuk menghandle error memiliki empat buah parameter yakni error, req, res, dan next seperti pada contoh dibawah ini.

// error handling
app.use(function(err, req, res, next) {
res.send('404 page not found');
});

Kita akan coba membuka halaman yang tidak ada pada route.

itulah basic error handling untuk menangani error 404 (halaman tidak ditemukan). Untuk lebih baiknya kita akan memberikan http status 404 serta pesan “404 page not found”.

// error handling
app.use(function(err, req, res, next) {
 res.status(404).send('404 page not found');
});

atau bahkan dapat membuat custom html untuk menangani error 404 ini. Berbeda dengan apache yang dapat diatur dengan menggunakan htaccess(error handling 404) pada express/nodejs harus kita handle sendiri. Buat file html menghandle error.

<center>
    <p>
        <b> ERROR 404 : PAGE NOT FOUND </b>
    </p>
</center>

pada middleware kita akan kirimkan file html tersebut kepada client

// error handling
app.use(function(err, req, res, next) {
    res.status(404).sendFile(__dirname+'/error404.html');
});

maka ketika kita buka pada browser dengan route/path yang tidak ada akan memberikan file html tersebut kepada client/user.