⚠️ 这是一个 Vue 3 教程的旧版本。请访问 docs.meteor.com/tutorials/vue/meteorjs3-vue3-vue-meteor-tracker 获取最新版本。

2:集合

Meteor 已经为你设置了 MongoDB。为了使用我们的数据库,我们需要创建一个集合,我们将在这里存储我们的文档,在本例中是我们的 tasks

你可以在这里阅读更多关于集合的信息 这里

在此步骤中,我们将实现所有必要的代码,以便为我们的任务建立并运行一个基本的集合。

2.1:创建任务集合

我们可以通过在 imports 内部创建一个名为 db 的新文件夹来创建一个新的集合来存储我们的任务。然后,创建一个名为 TasksCollection.js 的文件,该文件实例化一个新的 Mongo 集合并导出它。

imports/db/TasksCollection.js

import { Mongo } from 'meteor/mongo';
 
export const TasksCollection = new Mongo.Collection('tasks');

请注意,我们将文件存储在 imports/db 目录中,这是一个存储与数据库相关的代码(如发布和方法)的地方。你可以根据需要命名此文件夹,这只是一种选择。

你可以删除 imports/api 文件夹中的 links.js 文件,因为我们不会使用此集合。

你可以在这里阅读更多关于应用程序结构和导入/导出的信息 这里

2.2:初始化任务集合

为了使我们的集合正常工作,你需要在服务器中导入它,以便它设置一些管道。

如果要在同一文件中使用,则可以使用 import "./imports/db/TasksCollection"import { TasksCollection } from "./imports/db/TasksCollection",但请确保已导入它。

现在很容易检查我们的集合中是否有数据,否则我们也可以轻松插入一些示例数据。

你无需保留 server/main.js 的旧内容。

server/main.js

import { Meteor } from 'meteor/meteor';
import { TasksCollection } from '../imports/db/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 并在其上添加一些任务,迭代一个字符串数组,并对每个字符串调用一个函数,将此字符串作为我们的 text 字段插入到我们的 task 文档中。

2.3:渲染任务集合

现在到了有趣的部分,你将使用 Vue“数据容器”来将 Meteor 的响应式数据馈送到 Vue 的组件层次结构中,从而渲染任务。我们将使用 vue-meteor-tracker 包来实现这一点。

Meteor 使用 Meteor 包和 NPM 包,通常 Meteor 包使用 Meteor 内部或其他 Meteor 包。

此包已包含在 Vue 骨架中(meteor create --vue yourproject),因此你无需添加它。

现在你已准备好导入此包中的代码。

从 Meteor 包导入代码时,与 NPM 模块的唯一区别是需要在导入语句的 from 部分前面加上 meteor/

首先,我们需要在 App 组件中实现一个订阅,以获取来自服务器的更新的任务。这可以通过简单地使用 vue-meteor-tracker 中的 subscribeautorun 函数来完成。

imports/ui/App.vue

<script setup>
import Task from './components/Task.vue'
import { subscribe, autorun } from 'vue-meteor-tracker'
import { TasksCollection } from '../db/TasksCollection'

subscribe('tasks')
const tasks = autorun(() => TasksCollection.find({}).fetch()).result
</script>

<template>
  <div class="container">
    <header>
      <h1 class="text-4xl font-bold text-gray-800 my-4">Todo List</h1>
    </header>
    <ul class="list-disc list-inside p-4">
      <Task v-for="task of tasks" :key="task._id" :task="task" />
    </ul>
  </div>
</template>

但是要查看客户端中的这些数据,你需要在服务器中发布它。为此,创建一个名为 tasksPublications.js 的文件并添加以下代码

imports/api/tasksPublications.js

import { Meteor } from 'meteor/meteor';
import { TasksCollection } from '../db/TasksCollection';

Meteor.publish('tasks', function publishTasks() {
  return TasksCollection.find({ userId: this.userId });
});

此外,不要忘记在服务器中导入它

server/main.js

import '../imports/api/tasksPublications';

如果你想了解更多关于发布如何工作的信息,你可以阅读 Meteor 指南

现在,你的应用程序应该如下所示

你可以在服务器上的 MongoDB 中更改你的数据,你的应用程序将做出反应并为你重新渲染。

你可以通过在应用程序文件夹的终端中运行 meteor mongo 或使用 Mongo UI 客户端(如 NoSQLBooster)连接到你的 MongoDB。你的嵌入式 MongoDB 正在端口 3001 上运行。

查看如何连接

查看你的数据库

你可以双击你的集合以查看存储在其上的文档

回顾:你可以检查你的代码在此步骤结束时应是什么样子 这里

在下一步中,我们将使用表单创建任务。

在 GitHub 上编辑
// 搜索框