Başlangıç
Önceki bölümde basit bir Node uygulaması kodlayıp HTTP isteğini JSON formatında bir mesajla yanıtlamıştık.
Bu bölümde biraz daha derine dalıp CRUD(Create, Read, Update, Delete) işlemleri yapacağız. Bu yazının sonunda MongoDB’ye nasıl bağlanacağımızı öğrenecek, nesne modelleme için Mongoose kullanacak ve GET, PUT, POST, DELETE metodlarını kullanacağız.
MongoDB Bağlantısı
Eğer hala MongoDB yüklemediyseniz buradan MongoDB’yi indirebilirsiniz.
MongoDB’ye bağlanmak için 3 şeyi yapmamız gerekiyor.
- Mongoose paketini kurmak
- Mongoose paketini yüklemek
- Bağlantı dizesini kullanarak bağlanmak
npm ile Mongoose paketini manuel olarak yüklemek için aşağıdaki komut satırını çalıştırıyoruz.
npm install mongoose --save
Önceki yazıda oluşturduğumuz server.js üzerinde aşağıdaki değişiklikleri yapıyoruz.
//İhtiyacımız olan paketleri yüklüyoruz var express=require('express'); var mongoose=require('mongoose');
MongoDB bağlantısı
//İhtiyacımız olan paketleri yüklüyoruz var express=require('express'); var mongoose=require('mongoose'); //MongoDB veritabanımıza bağlanıyoruz mongoose.connect('mongodb://localhost:27017/vtbar');
Hata olmadığı takdirde uygulamamız yakışıklı bir şekilde çalışacaktır.
İlk Modelimizi Oluşturuyoruz – İçecek
İçecek modelimizi tutacak Javascript dosyamızı oluşturuyoruz. Proje yapımız aşağıdaki gibi gözükmelidir.
bar models //Bu klasörün altında oluşturuyoruz icecek.js
Oluşturduğumuz yeni dosyaya aşağıdaki kodları ekliyoruz.
//İhtiyacımız olan paketleri yüklüyoruz var mongoose=require('mongoose'); //İçecek modelimizi tanımlıyoruz var IcecekSchema=new mongoose.Schema({ ad: String, tur: String, adet: Number }); //Mongoose modelimizi dışarı açıyoruz module.exports=mongoose.model('Icecek',IcecekSchema);
Neler yaptık açıklayayım.
- Mongoose paketimizi yükledik
- İçecek modelimizin MongoDB içinde hangi şemada tutulacağını tanımladık.
- 2 string ve 1 number’dan oluşan içecek modelimizi tanımladık.
- Oluşturduğumuz modeli uygulama içinde kullanabilmek için modeli dışarıya açtık
Son olarak yeni oluşturduğumuz içecek modelini server.js dosyamızda yükleyeceğiz.
//İhtiyacımız olan paketleri yüklüyoruz var express=require('express'); var mongoose=require('mongoose'); var Icecek=require('./models/icecek');
POST ve PUT Metodlarını Cevaplamak
POST ve PUT metodlarında ki verileri kabul edebilmek için body-parser paketini de eklememiz gerekiyor. Aşağıdaki komut satırını çalıştırarak gerekli paketi indirebiliriz.
npm install body-parser --save
body-parser paketimizi kodumuzda tanımlıyoruz.
//İhtiyacımız olan paketleri yüklüyoruz var express=require('express'); var mongoose=require('mongoose'); var Icecek=require('./models/icecek'); var bodyParser=require('body-parser');
Ve son olarak Express uygulamamızda bu paketi kullanmalıyız.
//Express uygulamamızı oluşturuyoruz var app=express(); //body-parser paketini uygulamamızda kullanıyoruz app.user(bodyParser.urlencoded({ extended:true }));
İçecek Ekleme
Ve şimdi barımızı içecek ekleyecek kodları yazacağız. Aşağıdaki kodları server.js dosyasına ekleyelim.
// /beers ön ekiyle yeni bir yol oluşturuyoruz var icecekRoute=yonlendirici.route('/icecek'); // /api/icecek için POST handler tanımlıyoruz icecekRoute.post(function(req,res){ // İçecek sınıfından yeni bir nesne türetiyoruz var icecek=new Icecek(); // POST datası içinde gelen verileri set ediyoruz icecek.ad=req.body.ad; icecek.tur=req.body.tur; icecek.adet=req.body.adet; //Kayıt işlemini yapıyoruz icecek.save(function(err){ if(err) res.send(err); res.json({message: 'Icecek eklendi!', data: icecek}); }); });
‘/icecek’ ön ekiyle bir yol oluşturuyoruz ve sonra bu yola POST isteği geldiğinde yapılacakları belirtiyoruz. Bu durumda, yeni bir ‘Icecek’ modeli oluşturuyoruz, POST içinde gelen verileri oluşturduğumuz model örneğine atıyoruz. Ve Mongoose save metodunu çağırarak MongoDB veritabanımıza kayıt işlemimizi yapıyoruz.
İçecekleri Listeleme
Çok basit bir şekilde tüm içecekleri listeleyebiliriz. Az önce yaptığımız POST işlemine çok benzer şekilde implemantasyonumuzu yapıyoruz. Aşağıdaki kodları server.js dosyamızı ekliyoruz.
// /api/icecek için POST handler tanımlıyoruz icecekRoute.post(function(req,res){ ... }); //Eklenecek Kod Bloğu icecekRoute.get(function(req,res) { // Tüç içecekleri bulmak için Icecek modelini kullanıyoruz Icecek.find(function(err,beers) { if(err) res.send(err); res.json(beers); }); });
//icecek ön ekiyle oluşturduğumuz yola GET isteği geldiğinde ne yapacağımızı belirledik. Burada Mongoose Icecek modelinin find metodunu çağrıyoruz ve MongoDB veritabanımızdan bütün içecekleri alıyoruz.
İçecek Miktarının Güncellenmesi
Güncelleme işlemi için PUT metodunu kullanacağız. server.js dosyamızı aşağıdaki gibi güncelliyoruz.
//Tüm içeceklerin alındığı /api/icecek yolu icecekRoute.get(function(req,res) { }); //Yazdığımız yeni kod bloğu // PUT isteği için /api/icecek/:icecek_id yolu oluşturuyoruz icecekRoute.put(function(req,res) { //id ile içeceği buluyoruz Icecek.findById(req.params.icecek_id, function(err,icecek) { if(err) res.send(err); //Mevcut içeceğin miktarını güncelliyoruz icecek.miktar= req.body.miktar; //İçeceği kaydet ve hata kontrolünü yap icecek.save(function(err) { if(err) res.send(err); res.json(icecek); }); }); });
Id ile içeceği aldık ve miktarını güncelledikten sonra Mongoose save metoduyla MongoDB veritabınımıza kayddettik. Yani önceki yaptığımız işlemlerden farklı birşey yapmadık aslında.
İçecek Silmek
Server.js doyamızı aşağıdaki gibi güncelliyoruz.
//PUT isteği için /api/icecek/:icecek_id yolu icecekRoute.put(function(req,res) { ... }); // Yazdığımız yeni kod bloğu //DELETE isteği için /api/icecek/:icecek_id yolu oluşturuyoruz icecekRoute.delete(function(req,res) { //Id ile içeceği bulup silebilmek için Icecek nesnemizi kullanıyoruz Icecek.findByIdAndRemove(req.params.icecek_id, function(err) { if(err) res.send(err); res.json({message: 'İçecek kaldırıldı' }); }); });
Bu bölümde bu kadar. Sorularınız veya kafanıza takılan birşey olursa yorum kısmından yazabilirsiniz. Memnuniyetle en kısa süre cevaplamaya çalışacağım.