Joi adalah library yang memungkinkan anda membuat schema untuk memvalidasi objek javascript. Pada dasarnya Joi menyediakan metode untuk mempermudah dalam melakukan validasi seperti tipe data string, boolean, integer, email, nomor telepon.
Sebagai contoh berikut ini merupakan objek yang dikirim dari frontend ke backend :
{ "name": "Leravio", "email": "[email protected]" }
Namun kita tahu bahwa name minimal harus 1 karakter dan maksimal 55 karakter, sedangkan email harus bertipe mail. Dan keduanya adalah bersifat string dan wajib diisi.
Dengan validasi tersebut kita bisa dengan mudah membuatnya menggunakan Joi. Berikut ini validasi yang dibuat menggunakan Joi.
const schema = Joi.object().keys({ name: Joi.string().min(1).max(55).required(), email: Joi.string().email().required(), });
Mari kita lanjut ke tutorial menggunakan Joi validasi schema di Node.js
Setup Project
Langkah awal silahkan kalian buat terlebih dahulu folder untuk projectnya. kalian bisa gunakan perintah berikut di terminal untuk membuat folder.
mkdir joi-validation
Kemudian silahkan masuk ke dalam folder yang telah dibuat dengan perintah berikut.
cd joi-validation
Kemudian silahkan jalankan perintah berikut ini.
npm init
Silahkan buka file package.json kemudian tambahkan kode beriut ini.
// ... "scripts": { "start": "node index.js" }, // ...
Setelah itu kita akan menginstall beberapa library yang akan kita gunakan.
npm install express body-parser joi
Berikut ini penjelasan mengenai library yang digunakan :
- Express merupakan framework yang digunakan dalam pengembangan aplikasi dengan Node.js berbasis web. Express dapat membantu dalam menyederhanakan pengembangan website, selain itu Express dapat membantu kita dalam mebuat rute untuk permintaan HTTP seperti GET, POST, PUT, DELETE, dan sebagainya.
- body-parser dapat membantu dalam mengakses data permintaan dengan mudah melalui objek
req.body
. Tanpa body-parser, pengembang harus secara manual menangani parsing dan penguraian data permintaan, yang bisa memakan waktu dan kompleksitas. - Joi adalah sebuah library yang dapat membantu kita dalam membuat validasi terhadap input data yang akan diterima oleh aplikasi.
Setelah berhasil menginstall library yang dibutuhkan, Sekarang silahkan kalian buat file dengan nama index.js di dalam folder kalian. Dan tambahkan kode berikut ini.
const express = require('express'); const logger = require('morgan'); const bodyParser = require('body-parser');
kode diatas untuk memanggil library yang sebelumnya telah kita install. Kemduian kita tambahkan kode berikut untuk inisialisasi aplikasi.
// ... const app = express(); // server connection app.listen(3000, () => { console.log(`App running on port 3000`) });
Setelah itu silahkan kalian tambahkan body-parser untuk middlewares permintaan pada aplikasi.
// ... const app = express(); // load app middlewares app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); // server connection app.listen(3000, () => { console.log(`App running on port 3000`) });
Buat Joi Validasi
Langkah selanjutnya kita akan membuat rute dan menambahkan Joi untuk melakukan validasi schema. silahkan tambahkan kode berikut ini pada file index.js
// ... // API routes app.post('/user', (req, res, next) => { const schema = Joi.object().keys({ name: Joi.string().min(1).max(55).required(), email: Joi.string().email().required(), phone: Joi.string().regex(/^\d{3}-\d{3}-\d{4}$/).required(), birthday: Joi.date().max('1-1-2000').iso() }); }); // server connection app.listen(3000, () => { console.log(`App running on port 3000`) });
Kode diatas akan melakukan validasi yang telah diatur oleh Joi untuk permintaan data dalam skema yaitu name dan email.
Validasi untuk name :
- harus berupa string yang valid
- minimal 1 karakterk
- maksimal 55 karakterk
- wajib diisi
Validasi untuk email :
- harus berupa string email yang valid
- wajib diisi
Validasi untuk phone :
- harus berupa string dengan angka dalam format XXX-XXX-XXXX
- wajib diisi
Validasi untuk birthday :
- harus tanggal yang valid dalam format ISO 8601
- tidak bisa setelah 1 Januari 2000
- wajib diisi
Setelah itu kita akan menambahkan kode untuk mengambil data dan melakukan validasi terhadap skema. berikut ini kodenya.
// ... // API routes app.post('/user', (req, res, next) => { // ... const {error, value} = schema.validate(req.body) const id = Math.ceil(Math.random() * 9999999); if (error) { res.status(422).json({ status: 'error', message: `Invalid request data : ${error}` }); } else { res.json({ status: 'success', message: 'User created successfully', data: Object.assign({id}, value) }); } }); // server connection app.listen(3000, () => { console.log(`App running on port 3000`) });
Penjelasan mengenai kode diatas adalah jika salah satu aturan untuk name, email, phone, dan birthday gagal maka akan menampilkan kode 422 status error dan pesan “Invalid request data”.
Sedangkan apabila semuai aturan terpenuhi atau berhasil maka akan menampilkan kode 200 status success dan pesan “User created successfully”.
Sekarang kalian dapat menjalankan aplikasinya dengan perintah berikut.
npm start