Node.js ve MySQL ile Sequelize Kullanımı: Kapsamlı Kurulum Rehberi
Bu Rehberde Ne Öğreneceksiniz?
Bu rehberde Node.js projelerinde MySQL veritabanını Sequelize ORM ile nasıl yöneteceğinizi öğreneceksiniz.
Bağlantı kurulumu, model tanımı, CRUD işlemleri, tablo ilişkileri ve production önerileri ele alınır.
Teknik Özet
- Konu: Node.js + Sequelize + MySQL
- Amaç: SQL yazmadan güvenli ve sürdürülebilir veri yönetimi
- Çözülen Problem: Karmaşık sorgular ve kırılgan veritabanı yapıları
- Kapsam: Model, CRUD, ilişkiler,
.env, performans
Ön Hazırlıklar
- Node.js kurulu bir geliştirme ortamı
- Çalışır durumda bir MySQL sunucusu
- Temel JavaScript ve SQL bilgisi
1. Proje Kurulumu ve Paketlerin Yüklenmesi
mkdir rabisu-orm-projesi
cd rabisu-orm-projesi
npm init -y
npm install sequelize mysql2 dotenv
- Bu adım proje yapısını oluşturur ve gerekli paketleri kurar.
2. Veritabanı Bağlantısını Güvenli Yapılandırma
- Bağlantı bilgileri .env dosyasında tutulmalıdır.
DB_ISMI=rabisu_kutuphane
DB_KULLANICI=rabisu_admin
DB_SIFRE=GucluSifre123!
DB_HOST=localhost
DB_DIALECT=mysql
- Sequelize Bağlantısını Başlatma
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 MySQL bağlantısını test eder.
3. Model (Tablo) Oluşturma
- Sequelize’de her tablo bir model ile temsil edilir.
const { DataTypes } = require("sequelize");
const Kitap = sequelize.define("kitaplar", {
baslik: {
type: DataTypes.STRING,
allowNull: false
},
yazar: {
type: DataTypes.STRING,
allowNull: false
},
yayin_tarihi: {
type: DataTypes.DATEONLY
},
konu_id: {
type: DataTypes.INTEGER
}
});
sequelize.sync().then(() => {
console.log("Kitaplar tablosu hazır");
});
sync() yalnızca geliştirme ortamında kullanılmalıdır.
4. Temel CRUD İşlemleri
- Kayıt Ekleme
Kitap.create({
baslik: "Simyacı",
yazar: "Paulo Coelho",
yayin_tarihi: "1988-01-01",
konu_id: 1
});
Kayıt Okuma
js
Kitap.findAll();
js
Kitap.findOne({ where: { id: 1 } });
Kayıt Silme
js
Kitap.destroy({ where: { id: 2 } });
5. Tablolar Arası İlişkiler (Associations)
- One-to-Many (Bire-Çok)
const Ogrenci = sequelize.define("ogrenciler", { isim: DataTypes.STRING });
const Sinif = sequelize.define("siniflar", { seviye: DataTypes.INTEGER });
Sinif.hasMany(Ogrenci);
Ogrenci.belongsTo(Sinif);
Sinif.findAll({ include: Ogrenci });
Many-to-Many (Çoka-Çok)
const Ders = sequelize.define("dersler", { ad: DataTypes.STRING });
const OgrenciDers = sequelize.define("OgrenciDers", {});
Ders.belongsToMany(Ogrenci, { through: OgrenciDers });
Ogrenci.belongsToMany(Ders, { through: OgrenciDers });
6. Güvenlik ve Performans İpuçları
-
Şifreleri asla kod içine yazmayın
-
Production ortamında sequelize.sync() kullanmayın
-
Migration sistemi tercih edin
-
Sık sorgulanan alanlara index ekleyin
-
Connection pool ayarlarını yapılandırın
Sıkça Sorulan Sorular
1. Sequelize performansı düşürür mü? Hayır. Çoğu senaryoda fark ihmal edilebilir düzeydedir.
2. Migration neden önemlidir? Canlı sistemlerde veri kaybını önler.
3. Hangi veritabanları desteklenir? MySQL, PostgreSQL, MariaDB, SQLite ve MSSQL.
4. Raw SQL yazabilir miyim? Evet, sequelize.query() ile mümkündür.
Sonuç
Sequelize, Node.js ve MySQL projelerinde güçlü bir ORM çözümüdür. Doğru yapılandırıldığında güvenli, ölçeklenebilir ve bakımı kolaydır. Bu mimariyi Rabisu Bulut altyapısında güvenle kullanabilirsiniz.