Herhangi bir uygulama için bir REST API hazırladığınızı düşünün. Hem client hem server tarafında kontrol edilmesi gereken çok fazla parametre olacaktır. Örneğin email kontrolü client üzerinde basit bir şekilde kontrol edildiğinde çeşitli yollarla bu manüpile edilebilir durumda olabiliyor. Bu yüzden verileri eklediğimiz, güncellediğimiz son “endpoint” olan api’da bunları kontrol etmek çok yerinde olacaktır.

Joi tam bu devrede işimize en çok yarayacak paketlerden birisi. Kontrolün yanı sıra bazı metotlarla karmaşıklığı önleyecek yöntemleri içerir. Mesela bir kullanıcı adı sisteminiz var. Kimi kullanıcılar kUllaNIcı adını bu tarz yazıyor olabilir. Siz küçük harflerle göstermek istiyorsanız her seferine toLowerCase kullanmak yerine en baştan bu veriyi bu şekilde alıp kaydetmek daha mantıklı olacaktır.
O zaman bir express js uygulaması üzerinden Joi kullanımı nasıl oluyor bir kaç örnek yapalım. Daha önce express js kullanımından bahsettiğim şu yazıma da göz atabilirsiniz. Ben joi’i bilmeyenler için çok temelden anlatacağım detayları için mutlaka kendi dökümanına göz atmalısınız.
npm i joi
Oldukça hafif bir paket olan joi paketimizi kuralım. Şimdi api’da kullandığımız /register için email ve password parametlerine ihtiyacımız var. Ve şifre için belirlediğimiz en az karakter sayısı 6 en fazla girilecek karakter sayısı 16 olsun. Muhtemelen önce email ve password var mı yok mu daha sonra password en az 6 en fazla 16 karakterden mi oluşuyor diye bir kaç if else içerisine gireceğiz ve burada kontrol etmemiz gereken sadece 2 parametre var.
Joi Kullanımı Örnek Şema
Bu işleri çok sadeleştirecek olan kontrol şemamızı oluşturalım.
const Joi = require('joi');
const registerSchema = Joi.object({
email: Joi.string().email().required(),
password: Joi.string().min(6).max(16).required()
});
Burada oluşturduğumuz şemada joi’ye email parametremizin bir email türünde olması gerektiğini ve bu alanın mutlaka dolu olarak geldiğinden emin ol diyoruz. Kullanıcının boş geçmesini istemediğiniz alanlarda required() kullanmamız gerek. Burada email için kendi dökümanında daha fazla kontroller mevcut. Örneğin sadece com, net ya da sadece edu.tr uzantılı mailleri kabul et diye çeşitli ayarlamalar yapabiliriz.
Joi Şema Kontrolü
app.post('/register', async (req, res) => {
try {
const result = await registerSchema.validateAsync(req.body);
res.json(result)
} catch (error) {
res.json(error.message)
}
});
Yukarıda tanımladığımız registerSchema’ı asenkron ya da senkron olarak doğrulama işlemine tabi tutabiliriz. Eğer bir hata varsa catch kısmında bunu yakalayacağız eğer bir hata yoksa result objesi bize email ve password içeren bir obje olarak dönecektir.
Joi lowercase
Yazıya girişte bahsetmiştim kullanıcı email gibi zaten benzersiz olacak alanlarda emailin bazı harflerini büyük yazabiliyor bu işleyişi bozmaz ama görünüm açısından çok estetik durmayacaktır. Burada lowercase kullanarak result içerisinde bize gelecek olan email’i zaten toLowerCase uygulanmış biçimde bize gelecektir.
const registerSchema = Joi.object({
email: Joi.string().email().lowercase().required(),
password: Joi.string().min(6).max(16).required()
});
Input: email: “eXAMPle@example.com”
Output: email: “example@example.com”
Joi kullanımı aslında işlerin karmaşıklığını azaltmada çok fazla işe yaramaktadır. Tabi validasyon temel görevi.
Sorularınız olursa yorum kısmından yazabilirsiniz. Hepinize hayırlı günler dilerim, kolay gelsin.