Trang này được dịch bởi Cloud Translation API.
Switch to English

Đọc và ghi dữ liệu trên Web

Nhận một tài liệu tham khảo cơ sở dữ liệu

Để đọc hoặc ghi dữ liệu từ cơ sở dữ liệu, bạn cần một thể hiện của firebase.database.Reference :

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

Đọc và ghi dữ liệu

Tài liệu này bao gồm những điều cơ bản thu hồi dữ liệu và làm thế nào để đặt hàng và lọc dữ liệu căn cứ hỏa lực.

Dữ liệu căn cứ hỏa lực được lấy bằng cách gắn một người biết lắng nghe không đồng bộ với một firebase.database.Reference . Người nghe được kích hoạt một lần cho tình trạng ban đầu của dữ liệu và một lần nữa bất cứ lúc nào những thay đổi dữ liệu.

Cơ bản hoạt động ghi

Đối với các hoạt động ghi cơ bản, bạn có thể sử dụng set() để lưu dữ liệu vào một tài liệu tham khảo quy định, thay thế bất kỳ dữ liệu hiện tại con đường đó. Ví dụ một ứng dụng viết blog xã hội có thể thêm một người dùng với set() như sau:

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

Sử dụng set() ghi đè dữ liệu tại vị trí quy định, bao gồm bất kỳ nút con.

Nghe cho các sự kiện giá trị

Để đọc dữ liệu tại một con đường và lắng nghe những thay đổi, sử dụng on() hoặc once() phương pháp firebase.database.Reference để quan sát các sự kiện.

Biến cố điển hình sử dụng
value Đọc và nghe để thay đổi toàn bộ nội dung của một con đường.

Bạn có thể sử dụng các value sự kiện để đọc một bản chụp tĩnh trong những nội dung tại một con đường nhất định, như họ tồn tại vào thời điểm sự kiện này. Phương pháp này được kích hoạt một lần khi người nghe được gắn và một lần nữa mỗi khi dữ liệu, kể cả trẻ em, những thay đổi. Gọi lại sự kiện được thông qua một bản chụp có chứa tất cả các dữ liệu tại địa điểm đó, bao gồm dữ liệu con. Nếu không có dữ liệu, ảnh chụp sẽ trở lại false khi bạn gọi exists()null khi bạn gọi val() trên đó.

Ví dụ sau minh họa một ứng dụng viết blog xã hội lấy số lượng ngôi sao của một bài đăng từ các cơ sở dữ liệu:

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

Người nghe nhận được một snapshot có chứa dữ liệu tại vị trí nhất định trong cơ sở dữ liệu tại thời điểm sự kiện này. Bạn có thể lấy lại dữ liệu trong snapshot với val() phương pháp.

Đọc dữ liệu một lần

Trong một số trường hợp, bạn có thể muốn có một bản chụp của dữ liệu của bạn mà không cần nghe những thay đổi, chẳng hạn như khi khởi tạo một yếu tố giao diện người dùng mà bạn không mong đợi để thay đổi. Bạn có thể sử dụng once() phương pháp để đơn giản hóa kịch bản này: nó gây nên một lần và sau đó không kích hoạt một lần nữa.

Đây là hữu ích cho dữ liệu mà chỉ cần được nạp một lần và không được dự kiến ​​sẽ thay đổi thường xuyên hoặc yêu cầu lắng nghe tích cực. Ví dụ, ứng dụng blog trong các ví dụ trước đó sử dụng phương pháp này để tải hồ sơ của người dùng khi họ bắt đầu tác giả của một bài mới:

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';
  // ...
});

Cập nhật hoặc xóa dữ liệu

lĩnh vực cụ thể Cập nhật

Đồng thời viết thư cho trẻ em cụ thể của một nút mà không ghi đè lên các nút con khác, sử dụng các update() phương pháp.

Khi gọi update() , bạn có thể cập nhật các giá trị con cấp dưới bằng cách xác định một con đường cho chìa khóa. Nếu dữ liệu được lưu trữ trong nhiều địa điểm để mở rộng tốt hơn, bạn có thể cập nhật tất cả các trường hợp mà dữ liệu sử dụng dữ liệu fan-out .

Ví dụ, một ứng dụng viết blog xã hội có thể tạo ra một bưu chính, đồng thời cập nhật nó vào thức ăn hoạt động gần đây và thức ăn hoạt động của người dùng đăng tải sử dụng mã như thế này:

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);
}

Ví dụ này sử dụng push() để tạo một bài đăng trong nút chứa bài viết cho tất cả người dùng tại /posts/$postid và đồng thời lấy chìa khóa. Chìa khóa sau đó có thể được sử dụng để tạo ra một mục thứ hai trong bài viết của người dùng ở /user-posts/$userid/$postid .

Sử dụng các đường dẫn, bạn có thể thực hiện cập nhật đồng thời đến nhiều địa điểm trong cây JSON với một cuộc gọi duy nhất để update() , chẳng hạn như làm thế nào ví dụ này tạo bài mới ở cả hai vị trí. cập nhật đồng thời làm theo cách này là nguyên tử: hoặc tất cả các bản cập nhật thành công hay tất cả các bản cập nhật thất bại.

Thêm một Callback Hoàn

Nếu bạn muốn biết khi dữ liệu của bạn đã được cam kết, bạn có thể thêm một callback hoàn thành. Cả hai set()update() lấy một callback hoàn thành tùy chọn đó được gọi là khi viết đã được cam kết với cơ sở dữ liệu. Nếu cuộc gọi không thành công, gọi lại được thông qua một đối tượng lỗi chỉ ra lý do tại sao sự thất bại xảy ra.

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

dữ liệu Xóa

Cách đơn giản nhất để dữ liệu xóa là để gọi remove() trên một tham chiếu đến vị trí của dữ liệu đó.

Bạn cũng có thể xóa bằng cách xác định null làm giá trị cho một hoạt động viết như set() hoặc update() . Bạn có thể sử dụng kỹ thuật này với update() để xóa nhiều trẻ em trong một cuộc gọi API duy nhất.

Nhận Promise

Để biết khi nào dữ liệu của bạn được cam kết với máy chủ cơ sở dữ liệu căn cứ hỏa lực Realtime, bạn có thể sử dụng một Promise . Cả hai set()update() có thể trở lại một Promise bạn có thể sử dụng để biết khi nào ghi được cam kết với cơ sở dữ liệu.

nghe Detach

Callbacks được loại bỏ bằng cách gọi off() phương pháp trên cơ sở dữ liệu tham khảo căn cứ hỏa lực của bạn.

Bạn có thể loại bỏ một người biết lắng nghe duy nhất bằng cách đi qua nó như một tham số để off() . Gọi off() vào vị trí không có đối số loại bỏ tất cả các thính giả tại địa điểm đó.

Gọi off() trên một người biết lắng nghe cha mẹ không tự động loại bỏ các thính giả đã đăng ký trên các nút con của nó; off() cũng phải được gọi vào bất kỳ người nghe trẻ để loại bỏ các callback.

Lưu dữ liệu như các giao dịch

Khi làm việc với dữ liệu có thể bị hỏng do thay đổi đồng thời, chẳng hạn như quầy gia tăng, bạn có thể sử dụng một hoạt động giao dịch . Bạn có thể cung cấp cho hoạt động này một chức năng cập nhật và một callback hoàn thành bắt buộc. Chức năng cập nhật mất trạng thái hiện tại của dữ liệu như một cuộc tranh cãi và trả về trạng thái mong muốn mới mà bạn muốn ghi. Nếu khách hàng khác ghi vào vị trí trước khi giá trị mới của bạn được viết thành công, chức năng cập nhật của bạn được gọi là một lần nữa với giá trị hiện tại mới, đồng thời việc được xem xét lại.

Ví dụ, trong ứng dụng ví dụ viết blog xã hội, bạn có thể cho phép người dùng sao và các bài viết Bỏ dấu sao và theo dõi có bao nhiêu ngôi sao một bài đăng đã nhận được như sau:

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;
  });
}

Sử dụng một số lượng ngăn chặn giao dịch sao từ là không chính xác nếu nhiều người dùng sao cùng một bài cùng một lúc hoặc khách hàng có dữ liệu cũ. Nếu giao dịch bị từ chối, máy chủ trả về giá trị hiện tại cho khách hàng, chạy giao dịch một lần nữa với giá trị được cập nhật. lặp đi lặp lại này cho đến khi giao dịch được chấp nhận hay bạn hủy bỏ giao dịch.

ghi dữ liệu ẩn

Nếu một khách hàng mất kết nối mạng, ứng dụng của bạn sẽ tiếp tục hoạt động một cách chính xác.

Mỗi khách hàng kết nối với một cơ sở dữ liệu căn cứ hỏa lực duy trì phiên bản nội bộ riêng của mình bất kỳ dữ liệu hoạt động. Khi dữ liệu được viết, nó được viết lên phiên bản địa phương này đầu tiên. Các khách hàng căn cứ hỏa lực sau đó đồng bộ hóa dữ liệu với các máy chủ cơ sở dữ liệu từ xa và với các khách hàng khác trên cơ sở "nỗ lực tốt nhất" cơ sở.

Kết quả là, tất cả ghi vào cơ sở dữ liệu kích hoạt sự kiện địa phương ngay lập tức, trước khi bất kỳ dữ liệu được ghi vào máy chủ. Điều này có nghĩa ứng dụng của bạn vẫn đáp ứng bất kể độ trễ mạng hoặc kết nối.

Khi kết nối được thiết lập trở lại, ứng dụng của bạn nhận được các thiết lập phù hợp các sự kiện sao cho đồng bộ client với trạng thái máy chủ hiện tại, mà không cần phải viết bất kỳ mã tùy chỉnh.

Bước tiếp theo