Ana içeriğe geç

Node.js ve MySQL ile Sequelize Kullanımı

Bu rehber, Node.js projelerinde Sequelize ORM kullanarak MySQL veritabanı yönetimini adım adım öğretir.
Amaç, ham SQL yazmadan güvenli, okunabilir ve sürdürülebilir bir veri katmanı oluşturmaktır.


Teknik Özet

Sequelize, Node.js tabanlı uygulamalarda MySQL gibi ilişkisel veritabanlarıyla çalışmayı kolaylaştıran bir ORM kütüphanesidir.
Bu rehberde; kurulumdan başlayarak model oluşturma, CRUD işlemleri, tablo ilişkileri, güvenli yapılandırma ve migration süreçleri ele alınmaktadır.


Bu Rehberde Ne Öğreneceksiniz?

  • Sequelize nedir ve neden kullanılır
  • MySQL bağlantısının güvenli şekilde kurulması
  • Model (tablo) oluşturma
  • Veri ekleme, listeleme ve silme (CRUD)
  • One-to-Many tablo ilişkileri
  • Raw SQL sorgularının güvenli kullanımı
  • Production ortamı için migration ve best practice’ler

Ön Koşullar

  • Node.js (LTS sürüm önerilir)
  • Çalışır durumda MySQL servisi
  • JavaScript ve temel SQL bilgisi

1. Proje Kurulumu ve Sequelize Yükleme

mkdir sequelize-projesi
cd sequelize-projesi
npm init -y
npm install sequelize mysql2 dotenv
  • Bu adımlar Node.js proje yapısını oluşturur ve gerekli paketleri yükler.

2. Ortam Değişkenleri ile Güvenli Veritabanı Bağlantısı

  1. .env Dosyası

DB_ISMI=kutuphane_db
DB_KULLANICI=rabisu_user
DB_SIFRE=GucluSifre123!
DB_HOST=localhost
DB_DIALECT=mysql
  • Bu yapı, hassas bilgilerin kaynak koda gömülmesini engeller.

Sequelize Bağlantı Yapılandırması


require('dotenv').config();
const { Sequelize } = require("sequelize");

const sequelize = new Sequelize(
process.env.DB_ISMI,
process.env.DB_KULLANICI,
process.env.DB_SIFRE,
{
host: process.env.DB_HOST,
dialect: process.env.DB_DIALECT
}
);

sequelize.authenticate()
.then(() => console.log("Veritabanı bağlantısı başarılı"))
.catch(err => console.error("Bağlantı hatası:", err));
  • Bu kod, uygulama başlatılırken veritabanı bağlantısını test eder.

3. Model (Tablo) Oluşturma


const { DataTypes } = require("sequelize");

const Kitap = sequelize.define("kitaplar", {
baslik: { type: DataTypes.STRING, allowNull: false },
yazar: { type: DataTypes.STRING, allowNull: false },
yayin_tarihi: DataTypes.DATEONLY
});

sequelize.sync();
  • Model tanımına göre Sequelize otomatik tablo oluşturur.

4. CRUD İşlemleri

  1. Veri Ekleme

Kitap.create({
baslik: "Temiz Kod",
yazar: "Robert C. Martin",
yayin_tarihi: "2008-08-01"
});

  1. Veri Listeleme

Kitap.findAll();

  1. Koşullu Sorgu

Kitap.findOne({ where: { id: 1 } });

  1. Veri Silme

Kitap.destroy({ where: { id: 1 } });
  • Bu işlemler, SQL yazmadan temel veritabanı yönetimini sağlar.

5. Tablo İlişkileri (Associations)

  1. One-to-Many İlişki Örneği

const Ogrenci = sequelize.define("ogrenciler", {
isim: DataTypes.STRING
});

const Ders = sequelize.define("dersler", {
ders_adi: DataTypes.STRING
});

Ders.hasMany(Ogrenci);
Ogrenci.belongsTo(Ders);
  • Bu yapı, ogrenciler tablosuna otomatik olarak foreign key ekler.

6. Raw SQL Sorguları Kullanımı


sequelize.query(
'SELECT * FROM kitaplar WHERE id = :id',
{
replacements: { id: 1 },
type: sequelize.QueryTypes.SELECT
}
);
  • replacements kullanımı SQL Injection riskini azaltır.

7. Migration ve En İyi Uygulamalar

  1. Production ortamlarında sequelize.sync() kullanımı önerilmez. Bunun yerine migration mekanizması tercih edilmelidir.

Sequelize CLI Kurulumu


npm install --save-dev sequelize-cli
npx sequelize-cli init

Migration kullanımı:

  1. Şema değişikliklerini versiyonlar

  2. Geri alma (rollback) imkanı sunar

  3. Ekip çalışmasında tutarlılık sağlar


Sıkça Sorulan Sorular

1. Sequelize hangi veritabanlarını destekler? MySQL, PostgreSQL, SQLite, MariaDB ve Microsoft SQL Server.

2. sync force true ne işe yarar? Tabloları siler ve yeniden oluşturur. Production ortamında kullanılmamalıdır.

3. ORM performans kaybı oluşturur mu? Çoğu uygulama için fark ihmal edilebilir düzeydedir.

4. Bağlantı hatalarında ne kontrol edilmelidir? .env dosyası, MySQL servis durumu ve port erişimi.

5. TypeScript desteği var mı? Evet. sequelize-typescript paketi ile desteklenir.


Sonuç

Bu rehber ile Sequelize kullanarak:

Güvenli

Okunabilir

Ölçeklenebilir

Node.js ve MySQL tabanlı uygulamalar geliştirebilirsiniz.

Bu altyapıyı yüksek performanslı bir ortamda test etmek için Rabisu Bulut VDS çözümleri değerlendirilebilir.