Node.js ile Restful Web Servis (Bölüm 2)

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.

  1. Mongoose paketini kurmak
  2. Mongoose paketini yüklemek
  3. 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.

  1. Mongoose paketimizi yükledik
  2. İçecek modelimizin MongoDB içinde hangi şemada tutulacağını tanımladık.
  3. 2 string ve 1 number’dan oluşan içecek modelimizi tanımladık.
  4. 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.

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *