Implementasi Validasi Joi pada Node.js
Joi adalah pustaka validasi data berbasis skema yang paling banyak digunakan dalam ekosistem Node.js untuk memastikan input dari pengguna (seperti req.body, req.params, atau req.query) sesuai dengan format yang diharapkan sebelum diproses oleh logika bisnis. Dengan Joi, Anda dapat mendefinisikan aturan ketat seperti tipe data, panjang karakter, format email, hingga aturan kustom lainnya.
Langkah Instalasi dan Penggunaan Dasar
Untuk memulai, instal paket Joi melalui npm:
npm install joiBerikut adalah contoh implementasi dasar untuk memvalidasi input registrasi pengguna:
const Joi = require('joi');
const schema = Joi.object({
username: Joi.string().alphanum().min(3).max(30).required(),
email: Joi.string().email().required(),
age: Joi.number().integer().min(18).max(99)
});
const data = { username: 'azwinn', email: '[email protected]', age: 25 };
const { error, value } = schema.validate(data);
if (error) {
console.log('Validasi Gagal:', error.details[0].message);
} else {
console.log('Validasi Berhasil:', value);
}Tabel Aturan Validasi Umum
| Metode Joi | Deskripsi | Contoh Penggunaan |
|---|---|---|
| string() | Memastikan input bertipe string | Joi.string().min(5) |
| number() | Memastikan input bertipe angka | Joi.number().integer() |
| email() | Validasi format email standar | Joi.string().email() |
| required() | Field wajib diisi | Joi.string().required() |
| alphanum() | Hanya huruf dan angka | Joi.string().alphanum() |
| pattern() | Validasi menggunakan Regex | Joi.string().pattern(/^[a-zA-Z]+$/) |
Integrasi dengan Express.js
Praktik terbaik dalam aplikasi Express.js adalah menggunakan middleware untuk memisahkan logika validasi dari controller. Ini menjaga kode tetap bersih dan modular.
const validateRequest = (schema) => {
return (req, res, next) => {
const { error } = schema.validate(req.body);
if (error) {
return res.status(400).json({ error: error.details[0].message });
}
next();
};
};
// Penggunaan di route
app.post('/register', validateRequest(schema), (req, res) => {
res.send('Data valid!');
});Tips Troubleshooting
- AbortEarly: Secara default, Joi berhenti pada error pertama. Gunakan
{ abortEarly: false }dalam opsi validasi untuk mendapatkan semua pesan error sekaligus. - Unknown Keys: Gunakan
.unknown(false)untuk menolak input yang tidak didefinisikan dalam skema guna mencegah mass assignment vulnerability. - Sanitasi: Joi secara otomatis mengembalikan objek yang telah dibersihkan (misalnya menghapus spasi berlebih) melalui properti
valuehasil validasi.
🔍 Orang Lain Juga Mencari Ini
Joi Validation Middleware Express
Joi Schema Validation Nodejs
Nodejs Input Validation Best Practices
Joi Vs Express-validator
Joi Custom Validation Rules
Joi.object().keys() Example
Joi Email Validation
Joi String Pattern Regex
Joi Error Handling Nodejs
Secure API Input Validation Nodejs
Joi Validate Array Of Objects
Joi Required Field Validation
Joi Number Range Validation
Joi Alternative Validation
Joi.ref() Usage