Ana içeriğe geç

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

  1. 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
  1. 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

  1. 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

  1. 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)

  1. 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ı

  1. Şifreleri asla kod içine yazmayın

  2. Production ortamında sequelize.sync() kullanmayın

  3. Migration sistemi tercih edin

  4. Sık sorgulanan alanlara index ekleyin

  5. 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.