Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Web'deki Verileri Okuma ve Yazma

Bir veritabanı referansı alın

Veritabanından veri okumak veya yazmak için bir firebase.database.Reference örneğine ihtiyacınız vardır.

// Get a reference to the database service
var database = firebase.database();

Veri okuma ve yazma

Bu belgede, veri alma ile ilgili temel bilgiler ve Firebase verilerinin nasıl sipariş edilip filtreleneceği anlatılmaktadır.

Firebase verileri, bir firebase.database.Reference zaman uyumsuz bir dinleyici firebase.database.Reference . Dinleyici, verilerin ilk durumu için bir kez ve veriler her değiştiğinde yeniden tetiklenir.

Temel yazma işlemleri

Temel yazma işlemleri için, veriyi belirtilen bir referansa kaydetmek ve o yoldaki mevcut herhangi bir veriyi değiştirmek için set() kullanabilirsiniz. Örneğin, bir sosyal blog uygulaması aşağıdaki gibi set() ile bir kullanıcı ekleyebilir:

function writeUserData(userId, name, email, imageUrl) {
  firebase.database().ref('users/' + userId).set({
    username: name,
    email: email,
    profile_picture : imageUrl
  });
}

set() kullanılması, tüm alt düğümler de dahil olmak üzere belirtilen konumdaki verilerin üzerine yazar.

Değerli olayları dinleyin

Bir yoldaki verileri okumak ve değişiklikleri dinlemek için olayları gözlemlemek üzere firebase.database.Reference on() veya once() yöntemlerini kullanın.

Etkinlik Tipik kullanım
value Bir yolun tüm içeriğindeki değişiklikleri okuyun ve dinleyin.

Belirli bir yoldaki içeriklerin olay anında var olduğu haliyle statik bir anlık görüntüsünü okumak için value olayını kullanabilirsiniz. Bu yöntem, dinleyici eklendiğinde ve çocuklar da dahil olmak üzere veriler her değiştiğinde bir kez tetiklenir. Olay geri araması, alt veriler dahil olmak üzere o konumdaki tüm verileri içeren bir anlık görüntüden geçirilir. Veri yoksa anlık görüntü exists() çağırdığınızda false ve val() çağırdığınızda null döndürür.

Aşağıdaki örnek, veritabanından bir gönderinin yıldız sayısını alan bir sosyal blog uygulamasını gösterir:

var starCountRef = firebase.database().ref('posts/' + postId + '/starCount');
starCountRef.on('value', function(snapshot) {
  updateStarCount(postElement, snapshot.val());
});

Dinleyici, olay anında veritabanında belirtilen konumdaki verileri içeren bir snapshot alır. snapshot verileri val() yöntemi ile alabilirsiniz.

Verileri bir kez oku

Bazı durumlarda, örneğin değiştirmeyi beklemediğiniz bir UI öğesini başlatırken olduğu gibi, değişiklikleri dinlemeden verilerinizin anlık görüntüsünü isteyebilirsiniz. Bu senaryoyu basitleştirmek için once() yöntemini kullanabilirsiniz: bir kez tetiklenir ve sonra tekrar tetiklenmez.

Bu, yalnızca bir kez yüklenmesi gereken ve sık sık değişmesi veya aktif dinleme gerektirmesi beklenmeyen veriler için kullanışlıdır. Örneğin, önceki örneklerdeki blog uygulaması, yeni bir gönderi yazmaya başladıklarında bir kullanıcının profilini yüklemek için bu yöntemi kullanır:

var userId = firebase.auth().currentUser.uid;
return firebase.database().ref('/users/' + userId).once('value').then(function(snapshot) {
  var username = (snapshot.val() && snapshot.val().username) || 'Anonymous';
  // ...
});

Verileri güncelleme veya silme

Belirli alanları güncelleyin

Bir düğümün belirli alt düğümlerine diğer alt düğümlerin üzerine yazmadan aynı anda yazmak için update() yöntemini kullanın.

update() çağrılırken, anahtar için bir yol belirleyerek alt düzey alt değerleri güncelleyebilirsiniz. Veriler daha iyi ölçeklendirmek için birden çok konumda depolanırsa, veri yayma özelliğini kullanarak bu verilerin tüm örneklerini güncelleyebilirsiniz.

Örneğin, bir sosyal blog uygulaması bir gönderi oluşturabilir ve aşağıdaki gibi bir kod kullanarak bunu en son etkinlik akışına ve gönderen kullanıcının etkinlik akışına güncelleyebilir:

function writeNewPost(uid, username, picture, title, body) {
  // A post entry.
  var postData = {
    author: username,
    uid: uid,
    body: body,
    title: title,
    starCount: 0,
    authorPic: picture
  };

  // Get a key for a new Post.
  var newPostKey = firebase.database().ref().child('posts').push().key;

  // Write the new post's data simultaneously in the posts list and the user's post list.
  var updates = {};
  updates['/posts/' + newPostKey] = postData;
  updates['/user-posts/' + uid + '/' + newPostKey] = postData;

  return firebase.database().ref().update(updates);
}

Bu örnek, düğümde /posts/$postid tüm kullanıcılar için gönderiler içeren bir gönderi oluşturmak ve eşzamanlı olarak anahtarı almak için push() kullanır. Anahtar daha sonra kullanıcının /user-posts/$userid/$postid adresindeki mesajlarında ikinci bir giriş oluşturmak için kullanılabilir.

Bu yolları kullanarak, JSON ağacındaki birden çok konuma, bu örneğin her iki konumda da yeni gönderiyi nasıl oluşturduğu gibi, tek bir update() çağrısıyla update() eşzamanlı güncellemeler gerçekleştirebilirsiniz. Bu şekilde yapılan eşzamanlı güncellemeler atomiktir: ya tüm güncellemeler başarılı olur ya da tüm güncellemeler başarısız olur.

Tamamlama Geri Araması Ekleyin

Verilerinizin ne zaman işlendiğini bilmek istiyorsanız, bir tamamlama geri araması ekleyebilirsiniz. Hem set() hem de update() , yazma veritabanına tamamlandığında çağrılan isteğe bağlı bir tamamlama geri araması alır. Arama başarısız olursa, geri arama, hatanın neden oluştuğunu belirten bir hata nesnesi geçirilir.

  firebase.database().ref('users/' + userId).set({
    username: name,
    email: email,
    profile_picture : imageUrl
  }, function(error) {
    if (error) {
      // The write failed...
    } else {
      // Data saved successfully!
    }
  });
}

Verileri sil

Verileri silmenin en basit yolu, bu verinin konumuna referansla remove() 'yi çağırmaktır.

set() veya update() gibi başka bir yazma işlemi için değer olarak null belirleyerek de silebilirsiniz. Bu tekniği, tek bir API çağrısında birden çok alt öğeyi silmek için update() ile birlikte kullanabilirsiniz.

Bir Promise Alın

Verilerinizin Firebase Realtime Database sunucusuna ne zaman teslim edildiğini bilmek için bir Promise kullanabilirsiniz. Hem set() hem de update() , yazma işleminin veritabanına ne zaman tamamlandığını bilmek için kullanabileceğiniz bir Promise döndürebilir.

Dinleyicileri ayır

Geri aramalar, Firebase veritabanı referansınızda off() yöntemi çağrılarak kaldırılır.

Tek bir dinleyiciyi parametre olarak off() öğesine ileterek kaldırabilirsiniz. Konumda bağımsız değişken olmadan off() çağrısı yapmak o konumdaki tüm dinleyicileri kaldırır.

Bir üst dinleyicide off() çağrısı, alt düğümlerinde kayıtlı dinleyicileri otomatik olarak kaldırmaz; Geri aramayı kaldırmak için herhangi bir alt dinleyicide off() da çağrılmalıdır.

Verileri işlem olarak kaydedin

Artımlı sayaçlar gibi eşzamanlı değişikliklerle bozulabilecek verilerle çalışırken, bir işlem işlemi kullanabilirsiniz. Bu işleme bir güncelleme işlevi ve isteğe bağlı bir tamamlama geri araması verebilirsiniz. Güncelleme işlevi, verinin mevcut durumunu bir bağımsız değişken olarak alır ve yazmak istediğiniz yeni istenen durumu döndürür. Yeni değeriniz başarıyla yazılmadan önce başka bir istemci konuma yazarsa, güncelleme işleviniz yeni mevcut değerle yeniden çağrılır ve yazma işlemi yeniden denenir.

Örneğin, örnek sosyal blog uygulamasında, kullanıcıların gönderilere yıldız vermesine ve yıldızlarını kaldırmasına ve bir gönderinin kaç yıldız aldığını aşağıdaki şekilde takip etmesine izin verebilirsiniz:

function toggleStar(postRef, uid) {
  postRef.transaction(function(post) {
    if (post) {
      if (post.stars && post.stars[uid]) {
        post.starCount--;
        post.stars[uid] = null;
      } else {
        post.starCount++;
        if (!post.stars) {
          post.stars = {};
        }
        post.stars[uid] = true;
      }
    }
    return post;
  });
}

Bir işlemin kullanılması, birden fazla kullanıcının aynı anda aynı gönderiye yıldız vermesi veya müşterinin eski verilere sahip olması durumunda yıldız sayımlarının yanlış olmasını önler. İşlem reddedilirse, sunucu güncel değeri istemciye döndürür ve bu da işlemi güncellenmiş değerle yeniden çalıştırır. Bu işlem, işlem kabul edilene veya siz işlemi iptal edene kadar tekrar eder.

Çevrimdışı veri yaz

Bir istemci ağ bağlantısını kaybederse, uygulamanız doğru şekilde çalışmaya devam edecektir.

Bir Firebase veritabanına bağlı her istemci, tüm etkin verilerin kendi dahili sürümünü saklar. Veriler yazıldığında, önce bu yerel sürüme yazılır. Firebase istemcisi daha sonra bu verileri uzak veritabanı sunucularıyla ve diğer istemcilerle "en iyi şekilde" senkronize eder.

Sonuç olarak, veritabanına yapılan tüm yazma işlemleri, herhangi bir veri sunucuya yazılmadan önce yerel olayları hemen tetikler. Bu, uygulamanızın ağ gecikmesinden veya bağlantısından bağımsız olarak yanıt vermeye devam ettiği anlamına gelir.

Bağlantı yeniden kurulduktan sonra, uygulamanız, istemcinin herhangi bir özel kod yazmak zorunda kalmadan mevcut sunucu durumuyla senkronize olması için uygun olay kümesini alır.

Sonraki adımlar