Örnek Uygulama – Modeller

Daha önce hazırlığını yaptığımız Profile.me projesinin bu sefer veritabanını ve modellerini oluşturacağız. Veritabanı bağlantılarını yapacağız. Veri kaydedip okuyacağız. Tabi bunların çoğunu Mongoose bizim için yapacak.node_js_full_modeller

Örnek Uygulama: Profile.me

  1. Hazırlık
  2. Modellerin oluşturulması ve MongoDB Bağlantılarının yapılması
  3. Servislerin yazılması
  4. Serverside rendering ile sayfaların oluşturulması

2. Modellerin Olusturulması ve MongoDB Baglantılarının Yapılması

Daha önce de belirttiğimiz gibi Mongoose kullanacağız. Mongoose MongoDB ile haberleşmek için kullanılan bir ORM katmanı. Bizim tüm nesnelerimiz json nesneleri ve veritabanımız da ilişkisel olmadığını düşünecek olursak bu araca ODM demek daha doğru olacaktır.

MongoDB kurulumunun nasıl olacağı ve hangi araçlarla MongoDB’yi yöneteceğiniz ne yazık ki bu yazının amacı dışında kalıyor. Ama Windows ortamların için basit bir Installer ve linux ortamları içinde ilgili dağıtımın paketleme şekilleri ile dağıtıldığından kurulumda bir zorluk yaşayacağınızı sanmıyorum. MongoDB üzerinde işlemler yaparken be komut satırı arayüzünü kullanacağım.

MongoDB kurulumunuzu lokal makinenize yaptığınızı ve kurulum sırasında varsayılan ayarları kullandığınızı düşünerek yazıya devam ediyorum.

2.1 Bagımlılıkların Eklenmesi

Bildiğiniz üzere bağımlılıklarımı NPM ile yönetiyoruz. Mongoose kullanmak için gerekli bağımlılıklarımızı projemizin ana dizininde bulunan package.json dosyasına ekliyoruz. Son durumda package.json dosyamızın içeriği aşağıdaki gibi oluyor.

package.json

Bağımlılıklarımızı ekledik fakat daha yüklemedik. Bunun için yine projemizin ana dizininde aşağıdaki komutu çalıştırıyoruz.

  • npm install

Bu komutu çalıştırdığımızda bağımlılıklarımız otomatik olarak yüklecek.

2.2 Modellerin Olusturulması

Şimdi ise sırada modellerin oluşturulması var. Bunun için template olarak kullancağımız tasarımı karış karış gezip nelerin görüntülenmesi gerektiğine baktım. Bu şekilde aşağıdaki json nesnesini elde ettim.

JSON nesneleri saklayabilen veritabanı kullandığımdan bunu doğrudan kaydedip kullanabilirim. Uygulamaya basitlik katması açısından bu tip bir nesneyi normalize etmeden doğrudan veritabanı modelim olarak kabul edeceğim. Farkettiyseniz içerisinde farklı boyutlarda olabilecek array’lerden tutunda başlı başına farklı koleksiyonlarda tutulabilecek nesneler de mevcut. Modeli oluştururken belirtmem gereken tek şey hangi alanın hangi sıfına ait değerler bulundurabileceği. Bunun yanı sıra validasyon sırasında kullanabilecek, tekillik belirten işaretler de kullanabilirim.

Bu bilgilerden yola çıkarak, öncelikle projemin ana dizininde models isimli bir klasör yaratıyorum. Şu anda benim tek bir modelim olacak olsa da gerçek bir projeden birden çok daha fazla model ile uğraşmam gerekecek.

Models klasörünü yarattıktan sonra içerisine portfolio.js isimli bir dosya yaratıyorum. Modelimi ve modelim ile ilgili tüm kısıtlamalarımı bu dosyanın içerisinde tanımlayacağım. Modelimi tanımlamadan mongoose kütüphanesini kullanacağımı belirtiyorum. Hemen ardından benim portfolio bilgilerimin tutulacağı şemayı tanımlamaya başlıyorum. Mongoose kütüphanesinde her şema mongose.Schema nesnesinden yaratılmaktadır.

portfolio.js

Gerekli alanlarımın çoğu String olduğundan çoğunu String olarak tanımlamam gerekti. Sadece portfolio nesnemin içerisinde bulunan skills nesnesinin value degeri sayılardan oluşabilmekte ve o sayılarında minimum ve maximum değerleri bulunmakta.

Ayrıca sistemde tanımlı her portfolio kendine ait tekil bir username bulundurmakta.

Son satırda ise bu sınıf üzerinden Portfolio nesnesinin kullanabilmesine olanak sağlamakta.

2.3 Veritabanı Baglantıları

Şimdi ise veritabanı bağlantılarını app.js dosyamıza ekleyebiliriz. Sonrasında ise örnek olması açısından başta veridiğim json nesnesini veritabanına kaydedeceğiz.

Veritabanı bağlantısını yapmak için aşağıdaki kodu app.js dosyamıza ekliyoruz.

Bu kod parçasının neler yaptığına değinecek olursak;

  • Öncelikle mogoose modülünü yüklüyor.
  • Ardından bağlantı adresimizi tutan string nesnesini yaratıyoruz. Burada kullandığımız portfoliodb bağlanacağımız veritabanının adı.
  • connect metodu tahmin edebileceğiniz üzere veritabanına bağlanmak için kullanılıyor. Hemen ardından callback fonksiyonu veriyoruz ki hatları yakalayabilelim.

Burdan sonra kodumuzu çalıştırıp test ediyoruz. Eğer veritabanı bağlantınız başarılıysa konsolda aşağıdaki yazıyı göreceksiniz.

  • Succeeded connected to mongodb://localhost/portfoliodb

2.4 Test Verilerinin Kaydedilmesi

Şimdi daha önce model oluşturma da kullandığımız test verilerini kaydedebiliriz. Uygulamamızın “/” adresine erişildiğinde veritabanına test verimizi kaydetmesini istiyoruz.

Bunun için app.js dosyasını aşağıdaki gibi değiştiriyoruz.app.js

İlgili değişikilikleri yapıp uygulamayı tekrar çalıştırdığınızda ve localhost:3000 adresine geldiğinizde, “Saved” yazısını ekranda göreceksiniz. Veritabanına girip baktığınızda ise bizim nesnemizin kaydedildiğini göreceksiniz.

Fakat tekrar localhost:3000 adresine girecek olursanız hata ile karşılaşacaksınız. Çünkü modelimizi tanımlarken username alanınıın tekil bir alan olacağını belirtmiştik.

Son

Modellerimizi oluştururp veritabanı işlemlerimizi yaptığımıza göre sıra servis katmanının yani router’ların yazılmasına geliyor.

End Of Line