Node Js Sequelize Kullanımı

Tolga Coşkun
4 min readDec 23, 2020

Sequelize Nedir?

Sequelize .Net dünyasında “Entity Framework”, Oracle dünyasında ise “Hibernate” kütüphanelerinin Node Js versiyonu olup, veritabanı tabloları ile javascript nesnelerini senkronize ettiğimiz bir ORM(Object Relational Mapping) kütüphanesidir. Kullanımı oldukça kolay, açık kaynak bir kütüphanedir. ORM’nin tüm özelliklerini barındırır.

Nasıl Kullanılır?

Öncelikle basit bir Node Js servis projesi oluşturacağız. Bunun için Node Js’nin kurulu olması gerekmektedir. NodeJs Kurulumu linki ile işletim sisteminize uygun kurulumu gerçekleştirebilirsiniz. Node Js ile npm(Node Package Manager ya da Node Packaged Modules ) kurulu olarak gelmektedir. Konsolda npm -v komutu ile kurulu olup olmadığını kontrol edebilir ve versiyon kontrolünü yapabilirsiniz.

İlk olarak sequelize-sample adında bir klasör oluşturuyoruz. Konsoldan bu dizine erişerek npm init komutunu çalıştırıyoruz. Aşağıdaki gibi set ediyoruz.

Ardından aynı klasör dizininde index.js dosyamızı oluşturuyoruz. Web uygulama sunucu çatısı olan express.js’yi kullanacağız. Sunduğu sınırsız HTTP yardımcı araçları ve katmanlar sayesinde sağlam bir API oluşturmak oldukça hızlı ve kolaydır. Gelen request body’lerinin parse edilmesi için de body-parser kütüphanesini kullanacağız. Bunun için klasör dizinimizde aşağıdaki komutları çalıştırıyoruz.

npm install express
npm install body-parser

Daha sonra index.js içerisinde aşağıdaki gibi kullanarak uygulamamızı 8080 portundan açıyoruz.

index.js

'use strict';const express = require('express');
const bodyParser = require('body-parser');
const app = express();app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
console.log(`Server listening on port ${PORT}...`);
});

Sequelize kullanabilmek için ilgili aşağıdaki paketleri yüklüyoruz. sequelize-cli yüklüyoruz çünkü migration işlemleri için çok kullanışlı olacak. sequelize-cli’yi global olarak ekliyoruz. Bu sayede kullanımı daha kolay olacaktır. Veritabanı için de MySql kullanacağımızdan dolayı mysql2 paketini dahil ediyoruz.

npm install sequelize
npm install sequelize-cli -g
npm install mysql2

Cli eklendikten sonra yeni konsol açarak yine proje dizininde

sequelize-cli init

komutunu çalıştırarak projemize aşağıdaki gibi dizinler eklenmiş olacaktır.

Proje Dizini

Burada config klasörü veritabanı bilgilerini gireceğimiz yerdir. migrations klasörü veritabanı ile nesneler arasında senkronizasyonu yapacağımız kısımdır. seeders klasörü toplu veritabanı işlemlerini yaptığımız kısımdır. models klasörü veritabanında tablolara karşılık gelen javascript nesnelerimizin olduğu kısımdır. Burada oluşan index.js modellerimizin yönetildiği database context’ine karşılık gelmektedir. Burada modeller context üzerinde işlenir ve modellere erişim yine bu context üzerinden sağlanmaktadır.

Veritabanı olarak MySql kullanacağız. Buradan ücretsiz mysql hosting alarak işlemlerinizi gerçekleştirebilirsiniz. Buradan aldığımız bilgileri config/config.json dosyasında aşağıdakine benzer şekilde gireceğiz.

İlk modelimizi oluşturalım. Bunun için aşağıdaki komutu çalıştırdığımızda models içinde league.js, migrations içinde de bu modele özel migrate işlemi yer almaktadır.

sequelize-cli model:generate --name league --attributes name:string,country:string
league ve migration nesnesi

Burada migration dosyasına baktığımızda sqlde leagues adında bir tablo oluşturacak ve id, createdAt ve updatedAt alanlarını otomatik setleyecektir. Modelde ise ihtiyacımız olan name ve country bilgileri ile nesne oluşturabileceğiz. associate(models) metodu ise bu nesnenin ilişkili olduğu nesneleri verdiğimiz yerdir. Bunun için 2. modelimiz olan team modelini oluşturalım.

sequelize-cli model:generate --name team --attributes name:string,logo:string,leagueId:integer
belongsTo ve hasMany işlemleri

Her takım bir lige ait olduğundan, oluşan team modelimiz için associate içerisinde kime ait olduğu bilgisini ve foreign key tanımını belongsTo metodu ile belirtiyoruz. Aynı şekilde her lig 1 den fazla takıma sahip olabileceğinden dolayı league modelimizde de associate içerisinde hasMany metodu ile birden fazla team modeline sahip olabileceğini belirtiyoruz.

Gerekli ilişki tanımlarını yaptıktan sonra aşağıdaki komut ile nesnelerimizin ilgili ilişkilerle veritabanında oluşturulmasını/güncellenmesini sağlıyoruz.

sequelize-cli db:migrate
Konsol çıktısından anladığımız gibi migration dosyalarımız sql’de çalıştırıldı. Tabloların oluşup oluşmadığını kontrol etmek için ilgili veritabanı kontrol edilebilir.

Modellerimiz oluştuğuna göre artık servis işlemlerini yapabiliriz. Bunun için index.js dosyasında get, post, put ve delete servislerini aşağıdaki şekilde yazıyoruz.

  • Yeni kayıt için, context üzerindeki league modelinde build metodu ile yeni bir instance oluşturuyoruz. Gerekli atamaların yapılmasının ardından instance üzerindeki save metodu ile veritabanına kayıt işlemini sağlıyoruz.
  • Kayıtları çekmek için, context üzerindeki league modelinde findAll metodu ile var olan tüm kayıtları çekip sonucu döndürüyoruz.
  • findAll metodu göründüğü gibi include ve where parametreleri alabilmektedir. include ilişkili tablonun join yapılmasını sağlar. Bu sayede select sorgusunda ilişkili tablonun da gelmesini sağlayabiliriz. where ile de model üzerinde istenilen filtreleri uygularız.
  • Model üzerinde bulunan destroy metodu ile de istenilen kaydı silebiliriz. Bu metod da findAll gibi where parametresi almaktadır.
  • Son olarak model üzerindeki update metodu ile ilgili kaydı güncelleyebiliriz. Buradaki ilk parametre ile güncellenecek modelin alanlarını setliyoruz. Yine where parametresi ile ilgili filtre işlemlerini yapabiliyoruz.

Sequelize kütüphanesi için CRUD işlemlerini bu şekilde gerçekleştirebiliriz. Umarım faydalı bir yazı olmuştur.

Not: Projenin tamamını buradan görebilirsiniz.

--

--