Node.js ve Express Generator ile Back-End Servis Yazma #2

i.faruk
Kodcular
Published in
3 min readJul 28, 2020

Merhaba arkadaşlar, bu yazımızda express-generator ile oluşturduğumuz uygulamayı MongoDb ile bağlayıp, CRUD(Create,Read,Update,Delete) işlemlerini uygulayacağız ve kütüphane back-end servisinin api uçlarını yazacağız.

Haydi başlayalım :)

MongoDb’ de Cluster Oluşturma

MongoDb üzerinden ücretsiz hesap açıp, oluşturmak istediğimiz Cluster ile ilgili ayarları yaptıktan sonra şöyle bir ekranla karşılacağız.

“Connect”’ e tıklayıp gelen ekranda “Connect your application” seçeneğine tıkladığımızda bizden “Driver version”’ı seçmemizi isteyecek. “Node.js 3.0 or later”’ı seçtikten sonra bize bir “Connection String” sağlayacak. Bu string’i, uygulamayı MongoDb’ye bağlamak için kullanacağız. Cluster’ınızı belirli ip’lerden gelen isteklere açmak için Network Access kısmından ayarlamaları yapabilirsiniz (Ip adresi kısmına “0.0.0.0/0" yazarsanız herhangi bir ip’den gelen istek karşılanacaktır).

MongoDb’yi Projeye Bağlama

MongoDb ile bağlantı kurmak ve CRUD işlemleri gerçekleştirmek için kullanacağımız “mongoose” paketini kuralım.

npm install mongoose

Geliştirme ortamı ile ilgili değişkenleri tutan “dotenv” paketini projeye ekleyelim.

npm install dotenv

Proje kök dizininde “.env” adlı bir dosya oluşturduktan sonra MongoDb üzerinden aldığımız “Connection String”’ini buraya ekleyelim.

MONGO_URI=mongodb+srv://<username>:<password>@cluster0-c2sem.gcp.mongodb.net/movie-api?retryWrites=true&w=majority

<username> ve <password> kısımlarına oluşturduğunuz Cluster’a erişimi olan herhangi bir kullanıcı bilgilerini girebilirsiniz( Projemizde CRUD işlemlerini gerçekleştirebilmek için read/write yetkisi olması gerekiyor). Bu işlemleri tamamladıktan sonra proje kök dizini altına “helper/db.js” dosyalarını oluşturalım. “db.js” dosyası içerisine MongoDb ile bağlantıyı sağlayacak kodu ekleyelim.

mongodb bağlantısı için oluşturduğumuz modül

Projemize db bağlantımızı sağlayacak modülü ekledikten sonra “app.js” içerisinde modülü çağıralım.

npm start ile uygulamayı ayağa kaldırdığımızda şu şekilde bir console çıktısı alırız. Eğer MongoDb tarafında hata alırsanız, Network Access ve Database Access sekmelerinden ayarlarınızı tekrar kontrol edebilirsiniz.

MongoDb Bağlantı Durumu

Veritabanı İçin Gerekli Modellerin Oluşturulması

Nodejs ile MongoDB’de CRUD işlemleri gerçekleştirmek için en çok kullanılan iki kütüphane bulunmakta. Bunlar mongoose ve mongodb.(Bu projede mongoose kullanıyoruz). Ben genellikle mongoose kullanıyorum ancak biraz araştırdığımda mongodb kütüphanesinin büyük ölçekli uygulamalarda daha çok tercih edildiğini gördüm.

Şimdi mongoose kütüphanesini kullanarak bir veritabanı işlemini nasıl gerçekleştireceğimize bakalım.

Bir veritabanı işlemi gerçekleştirebilmek için (mongoose ile) ‘Schema’ interface’ini kullanarak model oluşturmamız gerekli. Modeli mongodb’deki collection’ların field’larını ayarlamak için kullanacağız. (Mongodb collection’ları sql’deki tablolar gibi düşünebiliriz.)

Projeye models adında bir klasör daha ekleyelim ve kitapların ad,yazar,kategori ve bulunma durumunu tutan model’i aşağıdaki gibi oluşturalım.

‘type’ , ‘default’, ‘required’ field’in property’lerini ayarlamak için kullanılır. Diğer property’leri ve detaylı dökümanı şuradan inceleyebilirsiniz.

Model de hazır olduğuna göre ilgili router’ı oluşturup , bir INSERT işlemi yapalım. POST işleminde body’den Book modeli için gerekli değerleri alacağız ancak category ve lastUser field’larının type’larına dikkat ettiyseniz mongodb tarafından her document insert’inde oluşturulan _id tipinde vermemizi istiyor. Bunlara şimdilik rastgele bir id vereceğiz(Id’leri kendiniz de yönetebilirsiniz, ancak çok tavsiye edilen bir yöntem değil.). Düzenlemeleri yaptıktan sonra Book router aşağıdaki gibidir.

‘body’ de gönderilen değerleri BookModel’a göndererek cast işlemlerini tek tek yazmadan cast edebiliriz. ‘save’ metodu (mongoose’ da)db’ye bir document eklemek için kullanılır.Dönüş tipi bir Promise objesidir ve await ile de response’u yakalayabilirsiniz. Await keyword’unu kullanabilmek için callback fonksiyonu önüne async eklemeniz yeterli olacaktır.

Hali hazırda maalesef bir front-end’imiz yok :(. Ancak merak etmeyin, api’lerini test etmek isteyen back-end developer’lar için birçok alternatif mevcut. Biz postman’i tercih edeceğiz(İlerleyen yazılarda swagger’i da projeye dahil edeceğiz). npm start ile projeyi ayağa kaldırdıktan sonra aşağıdaki gibi bir request’i postman üzerinden gönderelim ve ilk INSERT’i gerçekleştirelim.

Postman’den book router’ina yapılan POST isteği
Postman’den book router’ina yapılan POST isteği

Dönen response’a dikkat ederseniz, document’in id’sini mongo kendi üretmektedir ve bu alanı _id olarak tutar.

npm start package.json içerisinde scripts altında bulunan start script’ini tetikler. ‘start’ script’ine dikkat ettiyseniz /bin/www js’ini çalıştırmaktadır. Bu yapı değişikliği express-generator ile app.js içerisinde yapılacak port ayarlarını ayrı bir js’de yönetmek için kullanılır. Default’ta node ile proje ayağa kaldırılmaktadır. Her yapılan değişiklikte uygulamayı durdurup tekrar başlatmamak için nodemon paketini global olarak ‘npm install nodemon -g’ ile indirelim ve script’i “nodemon ./bin/www” olarak değiştirelim. Bu şekilde uygulama sürekli ayakta kalacak ve yapılan bir değişikliği kaydetmeniz halinde kendini tekrar başlatacaktır.

Bir sonraki yazımızda book router’ına PUT, GET ve DELETE http metod’larını ekleyip ardından mongodb işlemleri gerçekleştireceğiz.

--

--