Eskiden uygulamalarımızı, veritabanlarına doğrudan bağlayıp, veritabanı işlemlerini SQL sorgularıyla yaparken ilerleyen yazılım teknolojisi, nesne tabanlı programlama dillerinin yaygınlaşmasıyla ve veritabanı yönetim sistemlerinin çoğalmasıyla birlikte SQL sorgularının karmaşıklığının ortadan kaldırılması ve daha okunaklı kodlar yazabilmek için ‘ORM’ (Object Relational Mapping) yapıları ortaya çıktı. ORM ile kod içerisine SQL satırları yazma ortadan kaldırılmış oldu. Sequelize bir ORM sistemi olup daha okunaklı kodlar yazmamızı, veri tabanı yönetim sistemimiz değiştiği zaman birkaç satırı değiştirerek uygulamamızı yeni bir veri tabanına bağlamamızı sağlayan, veri tabanı ile node.js arasındaki ORM sistemini sağlayan bir javascript paketidir.
İçindekiler
Şimdi node js üzerine sequelize nasıl kurulur bir örnekle açıklayalım. Öncelikle yeni bir dosya oluşturup, dosya içerisinde;
npm init
komutunu çalıştırın. Bu komuttan sonra gerekli npm paketlerini kurmak için;
npm install express sequelize sequelize-cli body-parser pg pg-hstore cors dotenv nodemon
Komutunu çalıştırın. Bu komuttaki sequelize ve sequelize-cli paketleri uygulamamıza sequelize dahil edecektir. Pg ve pg-hstore paketleri ise uygulamaya postgresql kullanmak için gerekli olacak paketler. Nodemon uygulamanın hataya düştüğü zaman kendini durdurmamasını sağlar. Bu komuttan sonra;
sequelize init
komutunu çalıştırın. Bu komut ile uygulamamıza artık sequelize bağlanmış durumda olacaktır. Sequelize ayarlarını yapmak için bir config dosyası oluşturun. Bu dosyada sequelize için gerekli olan kullanılan veri tabanı bilgilerini ve gerekli ayarlar yapılacaktır. Postgresql için bir örnek verecek olursak;
require('dotenv').config(); module.exports = { development: { username: "burak", password: "123456", database: "books", host: "127.0.0.1", dialect: "postgres" }, test: { username: "burak", password: "123456", database: "books", host: "127.0.0.1", dialect: "postgres" }, production: { username: "burak", password: "123456", database: "books", host: "127.0.0.1", dialect: "postgres" } }
“username”: veritabanı kullanıcı adı,
“password”: veritabanı yöneticisi şifresi,
“database”: veritabanı adı,
“host”: veritabanın bulunduğu adres,
“dialect”: kullandığımız veritabanı postgresql olduğu için postgres, diğer veritabanları için bu kısmı değiştirerek apiyi istediğimiz veritabanına bağlamış olacağımız kısım, diğer veritabanları için kullanılacak olan dialectleri aşağıda bulunmaktadır.
MySql veritabanı için ‘mysql’,
MariaDb veritabanı için ‘mariadb’,
Sqlite veritabanı için ‘sqlite’,
PostgreSql veritabanı için ‘postgres’,
MsSql veritabanı için ‘mssql’,
Dialectleri kullanılır.
Sequelize ayarlarını tamamladıktan sonra bir kök dizinimizde ‘.sequelizerc’ isimli bir dosya oluşturalım. Bu dosya sequelize için gerekli olan modellerin, seederların, bir önceki adımda oluşturduğumuz config dosyamızın ve migrationlarımızın yollarını tutan bir modül olacak. Buna bir örnek aşağıda verilmiştir.
const path = require('path'); module.exports = { "config": path.resolve('./config', 'config.js'), "models-path": path.resolve('./models'), "seeders-path": path.resolve('./seeders'), "migrations-path": path.resolve('./migrations') };
Bu adımdan sonra babel konfigürasyonlarımızı yapıp modellerimizi oluşturup migrate işlemimizi yapacağız. Tarayıcılar es6 dilini tanımazlar. Babel es6 ile yazılmış kodu tarayıcıya es5’e çevirerek iletmemizi sağlayan bir pakettir. İlk olarak babel paketlerimizi kuralım.
npm install --save-dev babel-cli babel-core @babel/core babel-preset-env
Paketlerimizi kurduktan sonra yine kök dizinde ‘.babelrc’ dosyası oluşturalım ve içerisinde gerekli sequelize için gerekli konfigürasyonlarımızı yazalım. Dosya örneği aşağıda verilmiştir.
{ "presets": [ ["env", { "targets": { "node": "current" } }] ] }
Babel ayarlarını yaptıktan sonra node uygulamamızın babel ile çalışmasını sağlamak için package.json dosyasında script alanını aşağıdaki gibi düzenlememiz gerekir.
"start": "nodemon --exec babel-node index.js"
sequelize model:create –name User –attributes name:string, username:string, email: string, password:string
Bu kod az önce oluşturduğumuz ‘.sequelizerc’ dosyasında belirlenen modeller için ayardaki yola giderek orada ‘user.js’ isimli bir dosya ve migration için belirlenen yolda da kendisi için bir migration oluşturur.
user.js dosyası aşağıdaki gibi olmalıdır;
'use strict'; const { Model } = require('sequelize'); module.exports = (sequelize, DataTypes) => { class User extends Model { /** * Helper method for defining associations. * This method is not a part of Sequelize lifecycle. * The `models/index` file will call this method automatically. */ static associate(models) { // define association here } }; User.init({ name: DataTypes.STRING, username: DataTypes.STRING, email: DataTypes.STRING, password: DataTypes.STRING }, { sequelize, modelName: 'User', }); return User; };
Tablomuzu oluşturduktan sonra bu tabloyu veri tabanında oluşturmak için aşağıdaki komutu çalıştırmak gerekir.
sequelize db:migrate
Bu komut bize oluşturduğumuz modelin veri tabanında bir tablosunu oluşturur. Artık tablonuzu kullandığınız veritabanı yönetim panelinde görebilirsiniz. Veri tabanında yapılan en son işlemi geri almak için aşağıdaki komutları çalıştırabilirsiniz.
sequelize db:migrate:undo sequelize db:migrate
Bütün değişiklikleri geri almak için aşağıdaki komutu çalıştırıp bütün değişiklikleri sıfırlayabilirsiniz.
sequelize db:migrate:undo:all sequelize db:migrate
Bu komutlardan sonra veri tabanınız ilk haline geri dönecektir. Ancak bu durumda elinizdeki test datanız tamamen kaybolacaktır. Bu durumla karşılaşmamak için sequelize üzerinden seederlar oluşturabilirsiniz. Daha sonra bu seederları çalıştırarak tek bir kod ile bütün test datanızı veri tabanına ekleyebilirsiniz. Bunu yapmak için gerekli olan komut aşağıda verilmiştir.
sequelize db:seed:generate --name demo-user
Bu kod parçacığı çalıştığında ‘.sequelizerc’ dosyasında belirlenen seed klasör yolunda bir javascript dosya oluşturacaktır. Bu dosyada ‘up’ fonksiyonunun içerisini kendi tablonuza göre düzenleyip test datanızı oluşturabilirsiniz. Kod örneği aşağıda bulunmaktadır.
'use strict'; module.exports = { up: async (queryInterface, Sequelize) => { await queryInterface.bulkInsert('Users', [{ name: 'Burak', username: 'brkylmzr', email: 'burak.yilmazer@mdpgroup.com', password: '123456', createdAt: new Date(), updatedAt: new Date() }], {}); }, };
Dosyamızı düzenledikten sonra aşağıdaki komutu çalıştırarak tablonuza veri ekleme işlemini gerçekleştirebilirsiniz;
sequelize db:seed:all
Böylece test datanız içeride oluşturulmuş olur. En son seed işlemini geri almak için aşağıdaki komutu yazabilirsiniz;
sequelize db:seed:undo
Belirli bir seed işlemini geri almak için aşağıdaki komut çalışıtırılır;
sequelize db:seed:undo:all
İlk model oluşturulduğunda model klasörümüzün içerisine index.js isimli bir javascript dosyası oluşturulur. Bu dosya modellerimizi çağırmak için kullanılır. CRUD işlemleri yapacağımız bir javascript dosyası oluşturalım ve bu index.js dosyasını çağıralım.
import db from "../models";
Tablomuza kayıt işlemi yaparak başlayalım. Az önce oluşturduğumuz user modeli yardımıyla tablomuza kayıt ekleyelim. Bu işlem için create fonksiyonu kullanılır. Parametre olarak json yapısında değer alır.
db.User.create(req.body).then(result => { return res.json({ type: true, data: 'Kullanıcı oluşturuldu' }); }).catch(e => { return res.json({ type: false, data: e.toString(), }) })
Tablomuzdaki bütün verileri çekmek için endpoint örneği aşağıda bulunmaktadır. Bu işlem için findAll fonksiyonu kullanılır.
db.User.findAll({}).then(result => { return res.json({ type: true, data: result, }); }).catch(e => { return res.json({ type: false, data: e.toString() }) })
Tablodan bir veriyi silmek için endpoint örneği aşağıda bulunmaktadır. Örnekte parametre ile gelen id numarasına ait kayıt silinmektedir. Silme işlemi için ‘destroy’ fonksiyonu kullanılır. Bu örnekte ‘where’ alanı ile silinecek id numarasını gönderdik. Truncate true gönderilirse tablodaki bütün veriler silinir.
app.delete('/:id', async (req, res) => { const id = req.params.id; db.User.destroy({where: {id}, truncate: false, cascade: false }).then(result => { return res.json({ type: true, data: "Kullanıcı silindi" }); }).catch(e => { return res.json({ type: false, data: e.toString(), }); }); });
Tabloda bir veriyi güncellemek için endpoint örneği aşağıda bulunmaktadır. Bu işlem için update fonksiyonu kullanılır. Örnekte parametre olarak gelen id’ye göre güncelleme işlemi yapılır. Parametre olarak güncellenecek olan data json tipinde gönderilir.
app.put('/:id', async (req, res) => { const id = req.params.id; db.User.update(req.body, {where: {id: id}}).then(result =>{ return res.json({ type: true, data: "kullanıcı güncellendi" }); }).catch(e => { return res.json({ type: false, data: e.toString() }) }) })
Sonuç olarak sequelize bize node.js ile geliştirdiğimiz backend uygulamalara entegre ederek ileride veri tabanı yönetim sisteminizi değiştirmek istediğimizde bütün backend kodlarını değiştirmek yerine sadece hazırladığımız config dosyası değiştirilerek yeni veritabanınızı kullanıma alabilir zamandan tasarruf edebilirsiniz. Bunun yanında birkaç satır kod ile yeni bir model oluşturabilme, seed fonksiyonları ile test datamızı anında oluşturabilme, migration komutları ile en son işlemlerimizi geri alma ve tablolarımızı bir kod satırı ile oluşturabilme kolaylığı sağlanmaktadır. Yukarıda yapılan işlemlere ait kodlara bu github reposundan ulaşabilirsiniz.
Software Developer
SAP Integration Suite’de API Management Nedir?
Giriş:SAP Cloud Platform API Management, tüketicileriniz, ortaklarınız ve çalışanlarınız için bağlantılı ve çok kanallı deneyimler...
Blockchain’i (Blokzincir) Tanıyalım
Blokzincir Nedir? Blokzincir (Blockchain) 2008 yılında kripto para bitcoin ile hayatımıza girdi. Blokzincir adeta birbirleriyle halka gibi...
SAP Entegre Finansal Çözümlerin İş Süreçlerine Sağladığı Faydalar
Finansal teknolojiler, işletmelerin iş süreçlerini kolaylaştırmaya ve dönüştürmeye devam ediyor. Günümüzde firmalar, geçmişte manuel...
NodeJS ile Test Ortamı Nasıl Oluşturulur?
Eğer okumadıysanız bu içeriği okumadan önce "NodeJS ile API Testi Nasıl Yapılır?" başlıklı içeriği okuyabilirsiniz.NodeJS ile Test...
SAP ECC Desteğinin Sonlanması ve SAP HANA’ya Geçişin Önemi
SAP, küresel iş dünyasının vazgeçilmez teknolojik çözümleri arasında yer alıyor. Özellikle, SAP ECC (Enterprise Central Component) uzun...
Almanya e-Fatura: Zorunluluklar ve Geçiş Takvimi
Almanya'da işletmeler için e-Fatura kullanımı, 22 Mart 2024'te yürürlüğe giren Wachstumschancengesetz (Büyüme Fırsatları Yasası) ile...
SAP ECC’den SAP S/4HANA’ya Geçiş Süreci
Kurumsal Kaynak Planlama (ERP) çözümleri işletmelerin temel operasyonlarını bir yazılım ile yönetmesini sağlamak için tasarlanmış...
SAP Fiori Client Uygulama Mağazalarından Kaldırılıyor
SAP Fiori Client Uygulaması 2022’nin ikinci çeyreğinde Apple ve Google uygulama mağazalarından kaldırılacak. Peki bu gelişme Fiori kullanan...
Intralojistik (İç Lojistik) Nedir?
Lojistiği, mal ve hizmeterin üretim noktasından tüketim noktasına kadar taşınması olarak tanımlayabiliriz. Intralojistik, lojistiğe...
Mailiniz başarıyla gönderilmiştir en kısa sürede sizinle iletişime geçilecektir.
Mesajınız ulaştırılamadı! Lütfen daha sonra tekrar deneyin.