2: 集合
Meteor 已经为你设置了 MongoDB。为了使用我们的数据库,我们需要创建一个集合,我们将在这里存储我们的文档,在我们的例子中是我们的tasks
。
你可以在这里了解更多关于集合的信息。
在此步骤中,我们将实现所有必要的代码,使我们的任务的基本集合能够运行起来。
2.1: 创建 Tasks 集合
我们可以通过在imports/api/TasksCollection.js
中创建一个新文件来创建一个新的集合来存储我们的任务,该文件实例化一个新的 Mongo 集合并导出它。
imports/api/TasksCollection.js
import { Mongo } from 'meteor/mongo';
export const TasksCollection = new Mongo.Collection('tasks');
请注意,我们将文件存储在imports/api
目录中,这是一个存储与 API 相关的代码(如发布和方法)的地方。你可以根据需要命名这个文件夹,这只是一个可选的命名方式。
2.2: 初始化 Tasks 集合
为了使我们的集合能够工作,你需要将其导入到服务器中,以便它能够设置一个基本的结构。
你可以使用import "/imports/api/TasksCollection"
或import { TasksCollection } from "/imports/api/TasksCollection"
(如果你打算在同一个文件中使用),但请确保它被导入了。
现在很容易检查我们的集合中是否有数据,否则我们可以在需要时轻松插入一些示例数据。
你不需要保留server/main.js
的旧内容。
server/main.js
import { Meteor } from 'meteor/meteor';
import { TasksCollection } from '/imports/api/TasksCollection';
const insertTask = taskText => TasksCollection.insert({ text: taskText });
Meteor.startup(() => {
if (TasksCollection.find().count() === 0) {
[
'First Task',
'Second Task',
'Third Task',
'Fourth Task',
'Fifth Task',
'Sixth Task',
'Seventh Task'
].forEach(insertTask)
}
});
因此,你正在导入TasksCollection
并在一个字符串数组上添加一些任务,并对每个字符串调用一个函数,将此字符串作为我们task
文档中的text
字段插入。
2.3: 渲染 Tasks 集合
现在到了有趣的部分,你将渲染保存在我们的数据库中的任务。使用 Svelte,这将非常简单。
在你的App.svelte
文件中,导入TasksCollection
文件,并且,而不是返回一个静态数组,返回保存在数据库中的任务。让我们使用 Svelte 的$ 反应式语句特性的扩展,来维护你的任务,称为$m
imports/ui/App.svelte
<script>
import Task from './Task.svelte';
import { TasksCollection } from '../api/TasksCollection';
$m: tasks = TasksCollection.find({}).fetch()
</script>
<div class="container">
<header>
<h1>Todo List</h1>
</header>
<ul>
{#each tasks as task (task._id)}
<Task task={task} />
{/each}
</ul>
</div>
看看你的应用现在应该是什么样子
你可以在 Svelte 的文档中了解更多关于$ 反应式语句的信息。我们将使用$m 跟踪器,它在内部使用Tracker.autorun,它允许你运行一个依赖于反应式数据源的函数,这样,如果稍后数据发生更改,则该函数将重新运行,这使得我们的任务查询成功完成。
$m
跟踪器之所以对我们可用,仅仅是因为我们使用了 Svelte 编译器zodern:melte
。
你还可以选择使用像rdb:svelte-meteor-data
这样的包来访问一些 Meteor 功能,例如useTracker
(它与Tracker.autorun
具有相同的目的),并且可以使用如下代码而不是使用$m
import { useTracker } from 'meteor/rdb:svelte-meteor-data';
$: tasks = useTracker(() => Tasks.find({}).fetch());
你可以在服务器上的 MongoDB 中更改你的数据,你的应用将做出反应并为你重新渲染。
你可以通过在应用文件夹中的终端中运行meteor mongo
或使用 Mongo UI 客户端(如NoSQLBooster)来连接到你的 MongoDB。你的嵌入式 MongoDB 正在端口3001
上运行。
查看如何连接
查看你的数据库
你可以双击你的集合以查看存储在其上的文档
但是等等,我的任务是如何从服务器到客户端的?我们将在稍后的发布和订阅步骤中对此进行解释。你现在需要知道的是,你正在将数据库中的所有数据发布到客户端。这将在以后删除,因为我们不想一直发布所有数据。
回顾:你可以查看此步骤结束时你的代码应该是什么样子这里
在下一步中,我们将使用表单创建任务。