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帐户和一个项目。按照以下步骤:
- 上注册免费的firebase帐户
-
创建一个新的燃料项目或选择现有的燃料项目。
-
在项目概述页面中,单击“实时数据库”以访问数据库控制台。
-
在数据库控制台中,您可以查看存储的数据,添加新节点,编辑/删除现有节点。
-
要从应用程序开始阅读/写作,您需要配置SDK。遵循“设置指南”将firebase添加到您的应用程序中。
-
确保定义安全规则以限制数据访问。我们稍后再介绍。
完成基本设置。 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驱动应用程序!
不要忘记结帐我的其他宝石文章。
快乐的编码â€