Veriler önemlidir, uygulama geliştirirken de öyle. Uygulama geliştirirken verileri farklı kaynaklardan alırız. Bunlardan bir tanesi kullanıcılardır. Web sayfasını ziyaret eden kullanıcılardan bilgi almak için formları kullanıyoruz.
Formlardan gelen verileri olduğu gibi kullanmak sıkıntılı olabilmektedir. Bu nedenle form bilgilerini denetlemek gereklidir. Bu işlemi tarayıcı üzerinde yapabildiğimiz gibi sunucu üzerinde de yapabiliriz.
Form bilgilerinin önemi arttığında hem tarayıcı ve hemde sunucu üzerinde denetlemek gerekli olabilmektedir.
express-validator Nedir?
Express-validator form üzerinden gönderilen bilgileri istenilen kriterlere göre denetleyen ve eğer hatalı girdiler varsa onların yakalanmasını sağlayan bir npm paketidir.
validator.js paketi üzerine kurulmuştur.
Form üzerinden gelen bilgileri alır, belirlenen kriterlere göre kontrol eder. Eğer istenilen gibi ise işlemin devam etmesini sağlar. Eğer bir hata varsa, hata mesajı oluşturur ve bu mesaja göre işlemin yönünün seçilmesine katkı sunar.
Mesela eğer bir eticaret sitesine bir müşteri kayıt oluyorsa geçerli bir eposta adresine sahip olmalıdır ve ayrıca şifresinin güvenlik açısından en azında belirli bir uzunlukta olması istenir. Eğer geçersiz bir eposta girilirse işlem durdurularak, tekrar form sayfasına yönlendirme yapılabilir.
Kurulum
express-validator standart bir npm paketi gibi kurulur. Bunun için terminal üzerinden proje klasörüne gelinerek aşağıdaki kodun çalıştırılması yeterlidir.
npm i --save express-validator
Uygulama Eklenme
express-validator paketini uygulamaya eklemek için aşağıdaki kodu kullanabilirsiniz.
const { body, validationResult } = require('express-validator');
express-validator paketi iki farklı metod sunar, body ve validationResult
express-validator body
Gelen form bilgilerini belirli kriterlere göre denetlemek için kullanılır. Route işlemi sırasında bir middleware (ara katman) fonksiyonu olarak kullanılır. Farklı metodlar kullanarak denetim yapılmasını sağlar. Birden fazla metod kullanılacaksa zincirleme (chain) işlem yapılır.
Örnek bir kullanım aşağıdaki gibidir.
app.post(
"/register",
[
body("isim")
.not()
.isEmpty()
.withMessage("Lütfen bir isim giriniz."),
body("email")
.isEmail()
.withMessage("Lütfen geçerli bir eposta giriniz.")
body("sifre")
.not()
.isEmpty()
.withMessage("Lütfen bir şifre giriniz")
],
( req, res) => {
...
}
);
Örneğimizde formdan geldiğini varsaydığımız 3 alanı denetledik. Bunlar isim, eposta ve sifre alanlarıdır. Bu işlemi yaparken bir kaç metoddan faydalandık.
not() olamaz anlamına geliyor ve sonrasındaki metoda atıfta bulunuyor. not().isEmpty() bu alan boş olamaz anlamında geliyor ve sonraki withMessage ise eğer boş olursa bu mesajı dönder anlamındadır.
isEmail bu alanın bir eposta adresi olduğunu söyler.
express-validator body ile form ile alakalı tüm alanları tek tek denetleyebiliriz. Bunun için bu işlemleri [] ile bir array içerisinde alıyoruz. Her denetlenen eleman , ile ayrılıyor.
Yine bir eleman denetlenirken body(“eleman-ismi”).metod() şeklinde bir kullanım vadır. Kullanılacak tüm metodlar zincir metodu ile ardarda eklenir.
express-validator body Fonksiyonun Aldığı Parametreler
body ile birlikte çok sayıda parametre kullanılabilir. Bunlardan çok kullanılanlardan bazıları şunlardır.
- not olamaz anlamındadır ve kendinden sonraki elemana atıfta bulunur. body(“isim”).not().isEmpty() isim alanı boş olamaz anlamındadır.
- isEmpty boş alan anlamındadır.
- isEmail bu alanın geçerli bir eposta adresine sahip olması gerekktiğini bildirir.
- isURL girilen değerin geçerli bir adres olup olmadığını denetler.
- isStrongPassword güçlü bir şifre girilip girilmediği denetler.
- isNumeric girilen değerin bir rakam olup olmadığını denetler.
- isMobilePhone geçerli bir mobil telefon numarası olup olmadığını denetler.
- isLength girilen değerin belirli bir uzunlukta olup olmadığını denetler. Parametre olarak min ve max değerlerini alabilir. isLength({min: 5})
- isDate geçerli bir tarih olup olmadığını denetler.
- isCreditCard geçerli bir kredi kartı numarası olup olmadığını denetler.
- contains belirli bir string değeri içerip içermediğini denetler.
- equals belirli bir değere eşit olup olmadığını denetler.
Bunun gibi çok sayıda farklı isteğe göre denetim yapılabilir. Tam listesi için validator.js adresini ziyaret edebilirsiniz.
Hata Mesajı Oluşturma
Eğer form alanı istenilen bir değerde değilse bir hata mesajı oluşturulabilir. Bunun için withMessage fonksiyonu kullanılabilir. Mesela eposta adresi geçerli bir eposta değilse bir hata mesajı vermek istiyorsak
body("eposta").isEmail().withMessage("Lütfen geçerli bir eposta adresi giriniz.")
şeklinde yapabiliriz.
validationResult İle Hata Mesajlarını Yakalama
Gelen form verilerini express-validator body fonksiyonu ile denetledikten sonra eğer hata varsa hata bilgileri oluşturulur. Bu bilgilere bizim eklediğimiz hata mesajları da dahildir. Bu hata bilgilerini ulaşmak için validationResult fonksiyonunu kullanıyoruz.
validationResult request nesnesini alır ve eğer hata varsa o hataları geri dönderir. Kullanımı
app.get(
"/resgister",
[
body("isim")
.not()
.isEmpty()
.withMessage("Lütfen isim giriniz."),
body("sifre")
.not()
.isEmpty()
.withMessage("Lütfen şifre giriniz.")
],
(req, res) => {
const errors = validationResult(req);
...
}
);
Eğer hata varsa errors değişkenine bu hatalar atanır ve ona göre işlem yapabiliriz. Mesela isim girilmediğini varsayarsak, bir hata mesajı oluşturulacaktır. Biz bu hata mesajını yakalayarak işlem yapabiliriz.
Hatanın olup olmadığını errors.isEmpty() metodu ile yakalayabiliriz. Eğer sonuç true ise hata yok, ve fakat false ise hata var demektir. Çünkü eğer hata yoksa errors dizisi boş olacaktır. Böylece isEmpty metodu geriye true değeri dönderecektir.
const errors = validationResult(req);
if (!errors.isEmpty()) {
// Bir hata oluşmuş görünüyor
// Hata bilgilerini geri dönderelim.
res.send(errors);
} else {
// Hata yok işleme devam edelim.
}
Bir hata mesajı aşağıdaki yapıdadır.
Result {
formatter: [Function: formatter],
errors: [
{
value: '',
msg: 'Bir isim giriniz.',
param: 'isim',
location: 'body'
},
{
value: 'ss',
msg: 'Bir şifre giriniz',
param: 'sifre',
location: 'body'
}
]
}
Bu nedenle eğer bir hata mesajı oluştu ise, bu hatayı geri döndererek form sayfasında yazdırabiliriz. Bunun için geri dönen hata bilgilerini kullanmak yeterli olacaktır.
Sonuç
Form bilgilerini denetlemek ve eğer hatalı birşeyler varsa bu hataları yakalamak için Express JS ile birlikte express-validator paketini kullanabiliriz. Bu paket valitator.js paketinin bir uyarlamasıdır.
Sorularınız mı var? Yorumlardan bize ulaşabilirsiniz.
