27 Ağustos 2012 Pazartesi

Mongoose Nedir, Mongoose,Mongo DB NodeJS kullanıımı


Mongoose MongoDB üzerinde çalışan esnek, şema bazlı, zengin özellikleriyle geliştiriciye kullanım kolaylığı sağlayan bir ODM(Object Document Mapper) yapısı.

İlişkisel veri tabanları ile çalışıpta, java platformunda hibernate, .net platformunda Entity Framework ORM (Object Relational Mapping) çatılarını bilmeyen yoktur. En azından ben öyle olmasını umut ediyorum.

Mongoose ise ORM çatılarının sağladığı kolaylıkları bize mongoDB tarafında sağlayan bir araç.
JSON nesneleri ile çalışmamızı, bu nesneler üzerinden CRUD işlemleri gerçekleştirmemize olanak sağlayan, kısıtlamaları(constraints) ve varsayılan değerleri belirlememizi kolaylaştıran, hesaplatılmış alanlar(calculated fields) tanımlamamıza imkan veren Mongoose MongoDB ile uygulama geliştirmeyi çok daha akıcı ve kolay bir hale getiriyor.

Daha önce mongodb kurulumundan bahsetmiştik. Yazının kalanını takip edebilmeniz için sisteminizde mongoDB veritabanı uygulaması kurulu olmalıdır. Kurulu değilse linki takip ederek kurulum işlemini gerçekleştirebilirsiniz.

WebMatrix üzerinden yeni bir NodeJS uygulaması açalım. Komut istemcisinden projemizin olduğu dizine geldikten sonra sırasıyla şu komutu çalıştıralım.

npm install

Kurulumlar tamamlandıktan sonra mongoose yapısını kullanarak işlem yapmaya başlayabiliriz.İlk olarak
mongoDB ile bir bağlantı oluşturalım.


var mongoose = require('mongoose')
  , db = mongoose.createConnection('localhost', 'kisi');

Görüldüğü üzere localhost üzerinden çalışan mongoDB veritabanı
uygulamasının kisi veri tabanına bağlanmak istiyorum. İlişkisel veritabanlarının aksine böyle bir veri tabanını
oluşturmam veya hazır olması gerekmiyor.
Bu bağlantıyı kullanarak yaptığım ilk insert işleminde "kisi" veritabanı mongodb tarafından oluşturulacak
ve insert işlemi gerçekleştirilecek.

Bağlantımızı oluşturduktan ve başarı ile bağlantı kurduktan sonra, kullanmak istediğimiz nesnemiz için bir şema oluşturalım. Hemen hemen her proje de bir kişi yapısının olacağını düşünerek örnek nesnemizi kişi nesnesi olarak seçtim. Kişi nesnesinin sahip olmasını istediğimiz özellikleri belirleyelim ve şemamızı oluşturalım.

var kisiSchema = new mongoose.Schema({
    name: String,
    surname: String,
    email: String,
    age: { type: Number, min: 18, max: 100 }
});
var Kisi = db.model('Kisi', kisiSchema);

Gördüğümüz gibi şema içerisinde kişini adı, soyadı, email adresi, yaşı gibi özelliklerimiz mevcut.

Daha önce de bahsettiğimiz gibi şema yapıları içerisinde kısıtlamalar belirleyebiliyoruz.

Yaş alanı için belirlediğimiz min ve max kısıtlamaları bu değer aralığı dışında bir veri kaydı yapılmaya çalışıldığında
hata dönmesine sebep olacaktır.

Şemamızın davranışlarını belirlemek için şema içerisinde metodlar tanımlayarak bazı davranışları geliştirebiliriz.
Örneğin: kişi şeması içerisine adı ve soyadı bilgisini formatlanmış tek bir alan olarak getiren bir metod ekleyelim.

Tüm işlemleri yaparken veri tabanı ile henüz bir işlem yapmadık.Şimdi yeni bir kişi nesnesi oluşturup 

bu nesneyi veri tabanımıza kayıt edelim. Bu işlem için server.js içerisine "kisiEkle" istemi geldiğinde
çalışacak bir get metodu ekleyelim.Bu metod yapılan istem karşılığında "kisi" veri tabanına yeni bir kayıt ekeyecek,
işlem başarılıysa ekrana "kayit başarılı" mesajı dönerken hata alırsa aldığı hatayı yazdıracak.


app.get('/kisiEkle', function(req, res) {
    var kisi = new Kisi({ name: 'Ertuğrul', surname: 'Taş', email: 'ertugrul@nodejstr.com', age: 25 });
    kisi.save(function(err) {
        if(err) // TODO handle the error
            res.send(err);
        else
            res.send("kayit başarılı");
    });
});
Şimdi de "Kisi" şemasını kullanarak veri tabanına eklediğimiz kişileri listeleyecek bir get metodu yazalım.

app.get('/list', function(req, res) {
    Kisi.find(function(err, kisiler) {
        res.send(kisiler)
    });
});

Gördüğümüz gibi şema yapısı ile bu işlem bir kaç satır koddan ibaret.

Kısıtlamalarımızın çalışıp çalışmadığını görmek için "kisiEkle" isteminde yer alan yaş alanın "15" olarak değiştirip istem yapalım. Kısıtlamadan kaynaklı aldığımız hata mesajının görüntülendiğini göreceğiz.


Node v0.8.6 - Git

express@3.0.0rc3 node_modules\express
├── methods@0.0.1
├── fresh@0.1.0
├── range-parser@0.0.4
├── cookie@0.0.4
├── commander@0.6.1
├── crc@0.2.0
├── debug@0.7.0
├── mkdirp@0.3.3
├── send@0.0.3 (mime@1.2.6)
└── connect@2.4.3 (bytes@0.1.0, pause@0.0.1, qs@0.4.2, formidable@1.0.11)
 
mongodb@1.1.4 node_modules\mongodb
└── bson@0.1.1
 
mongoose@3.0.3 node_modules\mongoose
├── hooks@0.2.1
└── ms@0.1.0





Hiç yorum yok:

Yorum Gönder