JavaScript ve Node.js ile Veritabanı İşlemlerinde Async/Await ve Promises Kullanmak

JavaScript ve Node.js ile Veritabanı İşlemlerinde Async/Await ve Promises Kullanmak

JavaScript ve Nodejs kullanarak veritabanı işlemleri gerçekleştirmek artık daha kolay! Async/Await ve Promises yöntemleri, veritabanı işlemlerinin daha hızlı ve hatasız olmasını sağlar Bu yazıda, bu yöntemleri öğrenebilir ve veritabanı işlemlerini nasıl optimize edebileceğinizi keşfedebilirsiniz

JavaScript ve Node.js ile Veritabanı İşlemlerinde Async/Await ve Promises Kullanmak

JavaScript ve Node.js ile oluşturulan uygulamaların veritabanı işlemleri, Async/Await ve Promises kullanarak daha verimli hale getirilebilir. Bu konu, uygulama geliştiricilerinin veritabanı işlemlerini optimize etme konusunda farklı yaklaşımlar sunmaktadır.

Bu makalede, JavaScript ve Node.js ile veritabanı işlemlerinde Async/Await ve Promises kullanmanın önemi ve neden bu yapıların kodun okunabilirliğini ve performansını artırdığı tartışılacaktır. Ayrıca, veri ekleme, okuma, güncelleme ve silme işlemlerinin nasıl gerçekleştirileceği de adım adım anlatılacaktır.


Async/Await Nedir?

Async/Await, JavaScript işlemcilerinin belirli kod bloklarının bitmesini beklemesine izin veren bir programlama modelidir. Bu özellik, asenkron işlemlerde kodun okunabilirliğini ve performansını artırmak için kullanılır. Yani, kod sırası, işlemlerin tamamlanmasını beklemek zorunda kalmadan devam eder ve sonuçta, beklenen işlemler tamamlandığında devam eder.

Veritabanı işlemlerinde Async/Await kullanmak, özellikle birden fazla işlemi aynı anda çalıştırmak istediğinizde oldukça faydalıdır. Bu şekilde, işlemler arasında bekleme olmadan hızlı bir şekilde gerçekleştirilebilirler. Ayrıca, hataların yönetimi ve düzgün raporlanması da daha kolaydır. Bu makalede, Async/Await yapısını kullanarak veritabanı işlemlerini nasıl gerçekleştirebileceğinizi adım adım anlatacağız.


Promises Nedir?

Promise, bir asenkron işlemin nihai sonucunun temsil edilebileceği bir JavaScript nesnesidir. Asenkron işlemler, uygulamalarınızın verimli bir şekilde çalışmasını sağlamak için önemlidir. Bu işlemler, işlemcilerin birden fazla işlemi aynı anda yapabilmesine izin verir. Promises, bir asenkron işlem sırasında beklenen sonucun temsil edilmesini sağlar. Aynı zamanda, Promises kullanarak veritabanı işlemleri sırasındaki kodun okunabilirliğini artırabilirsiniz. Bu yöntem, geleneksel callback yöntemlerine göre daha fazla kontrol sağlar ve kodunuzun akışını daha net bir şekilde görebilirsiniz.

Bir Promisi, bir asenkron işlemin sonucunun temsil edildiği bir JavaScript nesnesidir. Buna ek olarak, Promises, ifadeleri zincirleme şeklinde düzenlemek için de kullanılabilir. Bu sayede, yazdığınız kod daha okunaklı ve sürdürülebilir hale gelir. Bir Promise oluşturmanın birkaç yolu vardır. Biz bu konuda, basit bir örnekleme yaparak Promises kullanımını anlatmaya çalışacağız. Örnek olarak, bir kullanıcının adını ve soyadını alacak olan bir uygulama yazalım. Bu işlem, veritabanımızda gerçekleştirilecek.

İsim Yaş
Ali 25
Ayşe 30
Can 28

Tabloda, veritabanımızda bulunan kullanıcılar listelenmektedir. Örneğimiz için, kullanıcının adını ve soyadını seçtiğimiz bir SELECT sorgusu çalıştıralım. Sorgumuzun sonucu bir Promise döndüreceğiz. Bu sayede, sonucu beklerken diğer işlemlerimizi yapabiliriz. Bu işlem, aşağıdaki kod parçası ile gerçekleştirilebilir.

  const kullaniciBilgisiAl = (kullaniciID) => {    return new Promise((resolve, reject) => {      // Veritabanına bağlantı sağlanır.      connection.query('SELECT ad, soyad FROM kullanıcılar WHERE id = ?', kullaniciID, (error, results, fields) => {        if (error) {          // Hata durumunda reject edilir.          reject(error);        } else {          // Veritabanından gelen sonuç resolve edilir.          resolve(results[0]);        }      });    });  }

Yukarıdaki örnekte, Promises kullanarak bir veritabanı işlemi gerçekleştirdik. Bu sayede, kodumuzun okunabilirliğini ve sürdürülebilirliğini arttırırken aynı zamanda hatayı da doğru bir şekilde yönetebiliriz.


Promises Kullanarak Veritabanı İşlemleri Gerçekleştirmek

Promises kullanarak Node.js'de veritabanı işlemleri gerçekleştirmek oldukça basittir ve işlemlerinizi daha okunaklı ve anlaşılır hale getirebilirsiniz. İşlem adımlarını şu şekilde sıralayabiliriz:

  • Veritabanı işlemi yapacağımız öncesi Promises oluşturulmalıdır.
  • Veritabanı işlemi tamamlandıktan sonra Promises sonucunun değeri, resolve veya reject olarak dönülmelidir.
  • Oluşturulan Promises, veritabanı işlemlerinin başarılı bir şekilde tamamlanması için kullanılır.

Bu adımlara göre, Promises kullanarak veri ekleme ve veri okuma işlemleri gerçekleştirilebilir. Örneğin, veritabanında bulunan bir ürün tablosuna yeni bir ürün ekleyelim:

Kod Parçası İşlevi
const addProduct = (product) => {    return new Promise((resolve, reject) => {        pool.query('INSERT INTO products SET ?', product, (err, result) => {            if (err) {                reject(err)            }            resolve(result)        })    })}
Veritabanına yeni ürün eklemek için Promises kullanarak kod parçasını yazdık.

Bu şekilde oluşturulan Promises, veritabanına yeni bir ürün eklerken kullanılabilir ve bu sayede işlem daha anlaşılır ve kolay hale gelir. Veri okuma işlemleri için de benzer şekilde Promises oluşturarak veritabanı işlemleri gerçekleştirilir.


Promises ile Veri Ekleme

Veritabanına veri eklemek için Promise'leri kullanmak oldukça basittir. İlk olarak, veri eklemek için kullanmak istediğiniz veritabanı sorgusunu yazmanız gerekir. Daha sonra Promise nesnesini oluşturabilirsiniz.

Bir Promise, bir işlemin nihai sonucunun temsil edilebileceği bir JavaScript nesnesidir. Promise nesnesi, veritabanı işleminin tamamlanmasını bekler ve sonucunda veri eklenirse, bir "resolve" işlevi çağırır. Veri eklenemezse, bir "reject" işlevi çağırır.

Promise kullanarak veri eklemek için, ilk olarak Promis'in yapısını kullanarak bir Promise nesnesi oluşturmanız gerekir. Daha sonra, Promise nesnesi, işlem tamamlandığında çalışacak olan bir işlev ile bağlanır. Bu işlev, veritabanı işleminin sonucunu alma ve sonucunu resolve veya reject olarak ayarlama işlemini gerçekleştirir.

Bir Promise nesnesi oluşturduktan sonra, veritabanı sorgusunu Promise nesnesiyle zincirleyebilirsiniz. Bu, veri eklemenin gerçekleştirilmesi ve sonucun Promise nesnesi tarafından alınması anlamına gelir.

Örneğin, aşağıdaki kod, verileri "kullanicilar" adlı bir tabloya ekler:

Promis Yapısı Kullanılarak Veri Ekleme Örneği
let veri = {
  ad: "Ahmet",
  soyad: "Yılmaz",
  yas: 25
};

let sorgu = "INSERT INTO kullanicilar (ad, soyad, yas) VALUES ('"+veri.ad+"', '"+veri.soyad+"', "+veri.yas+")";

let promise = new Promise(function(resolve, reject) {
  baglanti.query(sorgu, function(err, result) {
    if (err) reject(err);
     resolve("Veri eklendi: " + veri.ad + " " + veri.soyad);
  });
});

promise.then(function(veri) {
  console.log(veri);
});

Yukarıdaki örnekte, "veri" adlı bir nesne oluşturulur ve daha sonra bu nesneye dayalı bir veritabanı sorgusu oluşturulur. Promise yapısı kullanılarak bir Promise nesnesi oluşturulur. Promise nesnesine bir işlev atarız. Bu işlev, veritabanı sorgusunu gerçekleştirmek ve sonucunu Promise nesnesine ayarlamak için kullanılır. Sonunda, Promise nesnesi "then" işlevi ile bağlanır. Bu yazdığımız kod Parçaları örnek teşkil etmektedir. Gerçek kullanıma göre kod yapıları değişiklik gösterebilir.


Promises ile Veri Okuma

Node.js üzerinde veri okurken Promises kullanarak kodunuzun performansını artırabilirsiniz. Promises'in yapısal olarak verimli olması sayesinde daha kısa ve daha az kod yazarak daha hızlı sonuçlar elde edebilirsiniz. Bunun için öncelikle, veri okumak için kullanılacak olan database sorgusu oluşturulmalıdır. Sorgu, database bağlantısını sağlayacak olan bir objeye atanmalıdır. Daha sonra bu sorgunun sonucu Promise tarafından verileceği için bir dizi içinde Promise oluşturulmalıdır.

Promise, işlem sonucunu tutabilen bir objedir. Bu obje, işlem bittikten sonra sonuç verebilir veya hata ile karşılaşılması durumunda hata mesajı döndürebilir. Veri okumak için kullanılacak olan Promise, database sorgusunun sonucunu dönecektir.

Veri okuma işlemi için kullanılabilecek olan Promise yapısı aşağıdaki gibidir:

Kod Parçası
            const veriOkumaPromise = function(sorgu) {                return new Promise((resolve, reject) => {                    connection.query(sorgu, (error, results, fields) => {                        if (error) {                            reject(error);                        }                        resolve(results);                    });                });            };        

Yukarıdaki kod parçasında "connection.query(sorgu, (error, results, fields)" satırı sayesinde database sorgusu gerçekleştirilmektedir. Bu sorgu sonucu dönen veri, "results" değişkeninde tutulmaktadır. Eğer bir hata meydana gelirse, "error" değişkeninde hata mesajı tutulmaktadır.

Promises yapısını kullanarak veri okuma işlemi gerçekleştirmek için bu fonksiyon çağrılabilir. Fonksiyon, sorgusu atanmış olan bir obje almalı ve Promise yapısı ile sonuç vermelidir.


Async/Await Kullanarak Veritabanı İşlemleri Gerçekleştirmek

Node.js ile veritabanı işlemleri yapmak istediğinizde, Async/Await kullanarak asenkron fonksiyonlar yazabilir ve daha okunaklı, anlaşılır kodlar oluşturabilirsiniz. Async/Await, Promise'ler temel alınarak hazırlanmış bir programlama modelidir. Bu modelde, async bildirimi kullanılarak fonksiyonun asenkron çalıştığı belirtilir ve bu fonksiyonda await kullanarak beklenmesi gereken işlem tamamlanıncaya kadar diğer işlemler arka planda devam eder.

Async/Await kullanarak veritabanı işlemleri gerçekleştirirken, öncelikle veritabanına bağlanmak ve bir sorgu yapmak önemlidir. Bunun için, önceden yüklenmiş bir veritabanı sürücüsü kullanılarak bir bağlantı havuzu oluşturulmalıdır. Ardından, veritabanı işlemleri yapmak için gerekli fonksiyonları oluşturabilirsiniz.

Örneğin, bir veri eklemek için aşağıdaki fonksiyon kullanılabilir:

async function ekle(veri) {  try {    const baglanti = await havuz.getConn();    const sonuc = await baglanti.query('INSERT INTO tablo SET ?', veri);    await havuz.releaseConn(baglanti);    return sonuc;  } catch (hata) {    return hata;  }}

Yukarıdaki örnekte, veritabanına bağlanmak ve veri eklemek için gerekli işlemler await anahtar kelimesi kullanılarak gerçekleştirilir. Sonrasında, bağlantı havuzu üzerinden bağlantı serbest bırakılır ve sonuç döndürülür. Başarılı bir şekilde tamamlanamayan işlemler için ise bir hata döndürülür.

Veri okumak için de benzer bir yapı kullanılabilir. Örneğin, aşağıdaki fonksiyon kullanılarak veri okunabilir:

async function oku() {  try {    const baglanti = await havuz.getConn();    const sonuc = await baglanti.query('SELECT * FROM tablo');    await havuz.releaseConn(baglanti);    return sonuc;  } catch (hata) {    return hata;  }}

Yukarıdaki örnekte, veritabanından veri okumak için kullanılan sorgu async/await yapısı içinde kullanılmıştır. Bağlantı havuzu üzerinden bağlanılan veritabanından veri okunduktan sonra bağlantı serbest bırakılır ve sonuç döndürülür. Benzer işlemler, Async/Await kullanılarak veritabanı işlemleri için de yapılabilir.


Async/Await ile Veri Güncelleme

Veri güncellemek için Async/Await kullanmak oldukça kolaydır. Bunun için öncelikle update işlemi yapacağımız verinin seçilmesi gerekmektedir. Ardından bu veri güncellenerek kaydedilebilir.

Örneğin, bir kullanıcının bilgilerini güncellemek istediğimizde, kullanıcının önce veritabanından seçilmesi gerekiyor. Bu seçim işlemi için Async fonksiyonumuzu oluşturuyoruz ve kullanıcının bilgilerini güncelleyeceğimiz kod bloğunu yazıyoruz.

Örnek Kod:
async function kullanıcıGüncelle(id, yeniBilgiler) {  let kullanıcı = await Kullanıcı.findById(id); // id'ye göre kullanıcıyı seçelim  kullanıcı.ad = yeniBilgiler.ad; // yeni bilgileri güncelleyelim  kullanıcı.soyad = yeniBilgiler.soyad;  kullanıcı.email = yeniBilgiler.email;  await kullanıcı.save(); // güncellenen bilgileri kaydedelim  return kullanıcı;}

Kodumuzda, öncelikle kullanıcının seçildiğini ve daha sonra yeni bilgilerin güncellendiğini görebilirsiniz. Son olarak, .save() yöntemiyle güncellenen bilgiler veritabanına kaydedilir. İşlem tamamlandığında kullanıcının güncellenen bilgileri geri döndürülür.

Veri güncelleme işlemi de, veritabanı işlemlerinde Async/Await kullanımının önemli bir örneğidir. Bu model sayesinde, güncellemeler tek bir kod bloğunda düzenli hale getirilebilir ve performans arttırılabilir.


Async/Await ile Veri Silme

Verileri güncellediğiniz gibi, verileri silmek de veritabanı işlemlerinin önemli bir parçasıdır. Node.js'de Async/Await kullanarak veri silmek oldukça basittir.

Öncelikle, silmek istediğiniz verinin ID'sini alın:

Kolon Açıklama
ID Silinecek verinin ID'si

Ardından, asenkron bir işlev oluşturun ve ID'yi kullanarak veriyi veritabanından silin:

async function veriSil(ID) {  try {    const baglanti = await veritabani.baglan();    const sonuc = await baglanti.query("DELETE FROM tablo WHERE ID = ?", [ID]);    console.log("Silinen veri", sonuc.affectedRows);    baglanti.release();    return sonuc;  } catch (err) {    console.log(err);  }}

Ardından, bu fonksiyonu çalıştırarak veriyi silebilirsiniz:

veriSil(1)  .then((sonuc) => {    console.log("Veri başarıyla silindi");  })  .catch((err) => {    console.log(err);  });

Bu kodda, "tablo" yerine mevcut olan tablonun adını değiştirin ve "ID" yerine silmek istediğiniz verinin ID'sini belirtin. Bu kodu güncelledikten sonra, veritabanından veri silmek için Async/Await kullanabilirsiniz.

Sonuç olarak, Async/Await kullanarak Node.js'de veri silmek oldukça kolaydır. Tek yapmanız gereken, hangi veriyi silmek istediğinizi belirlemek ve veri silme fonksiyonunu geliştirmektir.


Sonuç

Bu makale, JavaScript ve Node.js kullanarak veritabanı işlemleri yaparken Async/Await ve Promises kullanmanın önemini vurgulamaktadır. Veritabanı işlemleri kodunuzun en önemli parçalarından biridir ve doğru yapılandırmak uygulamanızın performansını ve güvenliğini artırır. Async/Await ve Promises ile veritabanı işlemleri gerçekleştirirken kodunuzun okunabilirliği de artar.

Node.js kullanarak veritabanı işlemleri yapmak oldukça kolaydır ve Async/Await veya Promises kullanarak bunu yapmak daha da kolaylaşır. Promises, asenkron işlemlerin nihai sonucunun temsil edilebildiği bir JavaScript nesnesidir. Bu, veritabanı işlemleri sırasında kodunuzun okunabilirliğini artırır. Async/Await ise, belirli kod bloklarının tamamlanmasını bekleyen bir programlama modeli olarak işlev görür. Bu model, veritabanı işlemleri sırasında performansınızı da artırır.

Uygulamanızda veritabanı işlemleri yapıyorsanız, Async/Await veya Promises kullanarak yapmalısınız. Bunlar, kodunuzun okunabilirliğini artıracak ve performansınızı artıracaktır. Node.js kullanarak yapacağınız veritabanı işlemleri de oldukça kolaydır. Bu nedenle, bu makalenin mümkün olan en kısa sürede uygulamanıza yarar sağlayacağını düşünüyoruz. Veritabanı işlemleri sırasında Async/Await veya Promises kullanmanız, kodunuzun daha kararlı olmasını ve daha kolay güncellenebilir olmasını sağlayacaktır.