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ı
- .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
- Veri Ekleme
Kitap.create({
baslik: "Temiz Kod",
yazar: "Robert C. Martin",
yayin_tarihi: "2008-08-01"
});
- Veri Listeleme
Kitap.findAll();
- Koşullu Sorgu
Kitap.findOne({ where: { id: 1 } });
- Veri Silme
Kitap.destroy({ where: { id: 1 } });
- Bu işlemler, SQL yazmadan temel veritabanı yönetimini sağlar.
5. Tablo İlişkileri (Associations)
- 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
- 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ı:
-
Şema değişikliklerini versiyonlar
-
Geri alma (rollback) imkanı sunar
-
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.