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
ABAP Cloud İçin ATC Kontrolü
On-premise ortamdan buluta geçiş sürecinde, merkezi ABAP test kokpiti (ATC) kalite kontrolünü sağlamak için ATC'nin bulut tabanlı...
E-Arşiv Fatura Nasıl İptal Edilir?
01/01/2020 itibarıyla e-Fatura mükelleflerine, vergi mükellefi olmayan ancak aynı gün içinde 30 bin TL’nin üzerinde fatura kesen ve aynı...
Yalın Üretim Nedir?
1940’lı yıllarda Toyota Üretim Sistemi’nde ortaya çıkan Yalın Üretim (Lean Production / Lean Manufacturing), günümüzde iş...
SAP PO/CPI ile Microsoft Graph API Entegrasyonları
Microsoft Graph API Nedir? Microsoft Graph API, Microsoft Bulut hizmetlerine erişimi sağlayan...
Application Portfolio Management (APM) Nedir?
İşletmeniz büyüdükçe, BT ihtiyaçlarınızın kapsamı da büyür. Bu ihtiyaçları karşılamak için verilen bazı kararlar, kurumsal...
SAP Danışmanlığı Nedir?
Dünyanın en büyük yazılım şirketlerinden olan SAP, şirketlerin iş süreçlerini yönetmelerine ve satın almadan lojistiğe, satın alma ve...
SAP BTP Hizmetleri: Veri Zekası ve Kişiselleştirilmiş Öneri
SAP BTP, gelişmiş akıllı teknolojileri ile iş süreçlerinize birçok hizmet sunmaktadır. Bu yazıda SAP BTP'nin sunduğu hizmetlerden veri...
SAP HubSpot Entegrasyonu
HubSpot Nedir? Sektörün lider inbound pazarlama araçlarından biri olan HubSpot, işletmelerin tüm pazarlama, satış ve CRM süreçlerini tek...
SAP Fiori: Konseptler ve En İyi Uygulamalar
SAP Fiori Nedir? SAP Fiori, SAP uygulamalarını geliştirmek için kullanılan bir tasarım dili ve kullanıcı deneyimi (UX) yöntemidir. SAP...
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.