使用JavaScript使用CRUD教程的Firebase实时数据库详细指南
#javascript #初学者 #web3 #firebase

firebase实时数据库是一个云托管的NOSQL数据库,允许实时存储和同步数据。在本综合指南中,我们将探讨使用JavaScript的Firebase实时数据库的关键功能,了解如何结构化数据,并通过JavaScript进行详细的CRUD(创建,读取,更新,删除)操作教程。

Firebase实时数据库的概述

firebase实时数据库是一个灵活的,可扩展的数据库,用于移动和Web应用程序开发。这是其一些值得注意的功能:

  • 数据被存储为JSON,并将其与每个连接的客户端实时同步。

  • 实时侦听器可用于订阅数据更改。

  • 离线数据持久性允许应用程序在离线时继续运行。

  • 内置的安全规则和身份验证有助于安全数据访问。

  • 与分析,Crashlytics等其他壁炉服务无缝集成。

  • 基于用法的定价 - 仅支付您使用的资源。

数据库使用键值对存储数据。键是字符串,而值可以是原始类型,例如数字,字符串,布尔值或复杂的嵌套对象。

数据被组织为类似于以下的层级json文档:

{
  "users": {
    "alovelace": {
      "name": "Ada Lovelace",
      "email": "alovelace@gmail.com"
    },
    "ghopper": { 
      "name": "Grace Hopper",
      "email": "ghopper@gmail.com"
    }
  }
}

使用此结构,将相关数据分组为称为节点的集合。对于我们用户的数据,“用户”是root node,而“ Alovelace”和“ Ghopper”是child nodes

现在让我们了解如何从Firebase实时数据库开始。

开始使用Firebase实时数据库

要使用firebase实时数据库,您需要一个firebase帐户和一个项目。按照以下步骤:

  1. https://firebase.google.com

  2. 上注册免费的firebase帐户
  3. 创建一个新的燃料项目或选择现有的燃料项目。

  4. 在项目概述页面中,单击“实时数据库”以访问数据库控制台。

  5. 在数据库控制台中,您可以查看存储的数据,添加新节点,编辑/删除现有节点。

  6. 要从应用程序开始阅读/写作,您需要配置SDK。遵循“设置指南”将firebase添加到您的应用程序中。

  7. 确保定义安全规则以限制数据访问。我们稍后再介绍。

完成基本设置。 Firebase SDK提供了一个简单的API来执行CRUD操作,我们将接下来介绍。

执行CRUD操作

Firebase SDK提供了创建,阅读,更新和删除数据的简单方法。让我们通过每个操作进行示例:

1.创建数据

要编写数据,我们使用set()方法。它将数据写入指定的数据库路径或替换该路径上的任何现有数据。

// Write "ada" node to "users/alovelace"
db.ref("users/alovelace").set({
  name: "Ada Lovelace",
  email: "alovelace@gmail.com"  
});

// Output
// Wrote data to https://<databaseName>.firebaseio.com/users/alovelace

我们还可以将复杂的嵌套对象传递到set(),该对象将存储为JSON。

2.读取数据

要读取数据,请使用once()方法。它一次从指定的路径中获取数据。

const userRef = db.ref("users/alovelace");

userRef.once("value").then(snapshot => {
  const user = snapshot.val();
  console.log(user.name); // Ada Lovelace 
  console.log(user.email); // alovelace@gmail.com
});

// Output
// Ada Lovelace
// alovelace@gmail.com

我们还可以使用on()来设置持久的侦听器,这些听众不断收听数据更改。

3.更新数据

要更新现有数据,请使用update()。它仅更新指定的子密钥。

// Update email
db.ref("users/alovelace").update({
  email: "ada@lovelace.com"  
});

// Output 
// Updated 1 key/value pair(s)

要替换所有数据,请再次使用set()

4.删除数据

要删除数据,请使用remove()。它删除指定路径的所有数据。

db.ref("users/alovelace").remove();

// Output
// Successfully removed data from https://<databaseName>.firebaseio.com/users/alovelace

这涵盖了基本的CRUD操作。但是我们可以执行更多的高级查询。

查询数据

Firebase提供了几种查询和过滤数据的方法。一些有用的是:

  • orderByChild()-由子键进行排序

  • limitToLast()-获取最后一个结果

  • startAt()/endAt()-获取范围

  • equalTo()-查找匹配平等过滤器的项目

让我们看看一些示例:

// Sort users by email alphabetically
const usersRef = db.ref("users");
usersRef.orderByChild("email").once("value", ...);

// Get last 5 chat messages
const chatsRef = db.ref("chats"); 
chatsRef.limitToLast(5).once("value", ...);

// Fetch users between ages 18 to 30 
usersRef.orderByChild("age")
         .startAt(18).endAt(30)
         .once("value", ...);

// Find user by email
usersRef.orderByChild("email")
        .equalTo("ada@lovelace.com")
        .once("value", ...);

我们可以将多个查询方法组合在一起以创建复杂的查询。

使用通配符进行灵活查询

构建查询时,我们可以在数据库引用中使用通配符匹配灵活的数据路径。

一些示例:

// Get posts for all users 
const postsRef = db.ref("users/*/posts");
// This will match /users/uid1/posts, /users/uid2/posts etc

// Find recent posts across users
const recentPostsRef = db.ref("users/*/posts/*"); 
recentPostsRef.limitToLast(10).once(...)
// This will return the 10 most recent posts under any user

// Get chat messages for any room 
const roomMessagesRef = db.ref("chatrooms/-*/messages");
// This will match /chatrooms/room1/messages, /chatrooms/room2/messages etc

通配符提供了一种灵活而有力的方法来查询数据,而无需事先知道确切的节点结构。它们对于以下常见的社交应用模式很有用:

  • 在用户中获取最新帖子

  • 获取任何聊天室的消息

  • 通过节点搜索数据

请参阅Firebase文档,以获取有关使用通配符查询的更多详细信息和示例。它们通过以动态方式查询数据来帮助构建强大的应用程序。

现在我们已经涵盖了基本操作,让我们讨论如何构建数据。

构建您的数据

正如我们之前看到的,Firebase实时数据库中的数据被组织到层次结构json文档中。但是我们如何设计这种结构对于表演应用程序至关重要。以下是构建数据的一些最佳实践:

  • 按集合/类别组织数据 - 组相关的实体,例如用户,帖子,评论作为单独的根节点。避免单个大列表。

  • 避免嵌套数据太深 - 嵌套过度的数据需要多个往返来获取。保持筑巢水平浅。

  • 混合浅和深路径 - 使用深层和浅的子节点的混合物。浅节点是频繁写入的理想选择,而深路很适合频繁的数据。

  • 保留项目列表small - 存储诸如消息或帖子之类的集合时,每个节点的项目数限制为最大100-200个项目。

  • 避免保存大型非结构化数据 - 将图像或视频(例如Firebase存储)上存储在云存储中。仅将URL存储在数据库中。

  • 需要在需要时将数据降低 - 在各个位置重复数据以避免过度连接。

通过预先计划您的数据结构,请牢记这些要点,您可以优化您的应用程序以供性能。

接下来,我们需要学习如何通过定义安全规则来保护数据。

添加安全规则

默认情况下,任何人都可以读取且可以写入Firebase数据库中的任何数据。为了限制访问,我们在每个节点上定义安全规则。

一些示例:

// Allow only authenticated users to read/write user data
"users": {
  ".read": "auth != null",
  ".write": "auth != null",

  "$userId": {
    // Allow only the user to read/write their data
    ".read": "auth.uid === $userId",
    ".write": "auth.uid === $userId",
  }
}

// Make "posts" readable by anyone but writeable only by admins
"posts": {
  ".read": true,
  ".write": "root.child('admins').hasChild(auth.uid)" 
}

规则是递归应用的。因此,用户只能读取/写入他们的数据,而不能读取数据。这些简单的声明规则使确保数据变得容易。

有关更多示例,请参阅Firebase documentation on security rules。随着应用程序的发展,定义适当的规则对于数据安全至关重要。

结论

因此,在此详细指南中,我们研究了如何使用Firebase实时数据库来构建实时应用程序。一些关键要点:

  • 数据被存储为JSON文档,并实时跨客户同步。

  • 使用直观的firebase SDK方法执行常见的CRUD操作。

  • 构建您的数据,请注意嵌套级别,列表尺寸,不符合等方面的注意事项。

  • 使用基于身份验证的声明安全规则安全访问数据。

利用Firebase实时数据库提供的灵活API,您可以专注于创建无后端头痛的引人入胜的实时应用程序。利用本教程从本教程中获得的知识立即开始构建您的下一个Firebase驱动应用程序!

不要忘记结帐我的其他宝石文章。

快乐的编码â€