Web3.0验证(13)- 使用Meteor开发TODO管理应用程序(数据保存在MongoDB中)

上一次的Web3.0验证(12)- 使用Meteor开发TODO管理应用(基本功能)

首先

在上一次的验证之后,我们将扩展TODO管理应用,将TODO数据保存到MongoDB数据库中。

MongoDB的基础知识

MongoDBとは

ドキュメント指向のNoSQLデータベース

リレーショナルデータベース(RDB)と異なりトランザクションが無い
大量データを高速処理できるメリット

構成要素の比較

RDBMongoDBDatabaseDatabaseTableCollectionRecordDocumentColumnField

从终端1中执行Meteor应用程序。

$ cd simple-todos-react
$ meteor run
[[[[[ ~/simple-todos-react ]]]]]

=> Started proxy.
=> Started HMR server.
=> Started MongoDB.
=> Started your app.

=> App running at: http://localhost:3000/

你可以从启动消息中确认MongoDB已成功启动。

从终端2创建一个MongoDB集合。

将与API相关的代码(包括方法等)存放在imports/api目录中,添加文件。

$ cd simple-todos-react
$ vi imports/api/TasksCollection.js
import { Mongo } from 'meteor/mongo';

export const TasksCollection = new Mongo.Collection('tasks');

实例化并导出一个新的Mongo集合。

不要删除links.js文件。

$ rm imports/api/links.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をインポート
タスクを追加
文字列配列を反復処理

各文字列に対しinsertTask関数を呼び出し
文字列をタスクドキュメントのテキストフィールドとして挿入

渲染任务集合

Meteorパッケージ的先决知识

    • Meteorは、通常MeteorパッケージとNPMパッケージにより動作

パッケージは、Meteor内部または外部のものを利用可能

react-meteor-dataパッケージ

react-meteor-dataパッケージはデフォルトで有効
存在しない場合、meteor add react-meteor-dataで追加

Meteorパッケージからコードのインポート

npmモジュールとの唯一の違いは、インポートのfrom部分にmeteor/を追加

使用React Hook之前的基本知识

    • Reactフックとは

関数コンポーネントにReactの機能(stateやライフサイクル)を接続するための関数
フックはReactをクラスなしに使うための機能で、クラス内では機能しない

ReactフックuseTracker

useTrackerフックは、react-meteor-dataによりエクスポートされる
ReactフックによりReactコンポーネントに反応性(reactivity)を持たせる

反応性によって、データが変化されると、コンポーネントが即再レンダリングされる

需要呈现任务所需的东西

    • React関数コンポーネント

 

    Meteorreact-meteor-dataパッケージ
import React from 'react';
import { useTracker } from 'meteor/react-meteor-data';
import { TasksCollection } from '/imports/api/TasksCollection';
import { Task } from './Task';

export const App = () => {
  const tasks = useTracker(() => TasksCollection.find({}).fetch());

  return (
    <div>
      <h1>Welcome to Meteor!</h1>

      <ul>
        { tasks.map(task => <Task key={ task._id } task={ task }/>) }
      </ul>
    </div>
  );
};

使用浏览器查看应用程序

通过浏览器访问http://localhost:3000/。

image.png

在MongoDB中查看/修改数据。

我将在MongoDB中确认数据。
如果数据有更改,应用程序将作出反应并重新渲染。

从终端3连接到MongoDB。

进入项目目录,
使用meteor mongo命令执行客户端操作。
※ 内置的MongoDB将在端口号3001上启动
※ 也可以使用其他Mongo UI客户端工具NoSQLBooster。

$ cd simple-todos-react/
$ meteor mongo
MongoDB shell version v5.0.5
connecting to: mongodb://127.0.0.1:3001/meteor?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("9b432a0c-1289-4841-bae7-b0fa70307d48") }
MongoDB server version: 5.0.5
... ...
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        https://docs.mongodb.com/
Questions? Try the MongoDB Developer Community Forums
        https://community.mongodb.com
---
meteor:PRIMARY>

查看数据库/集合/文件

    データベース一覧
meteor:PRIMARY> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
meteor  0.000GB
    データベースmeteorを指定
meteor:PRIMARY> use meteor
switched to db meteor
    コレクションを確認
meteor:PRIMARY> show collections
links
tasks
    ドキュメントを確認
meteor:PRIMARY> db.tasks.find()
{ "_id" : "kyMgiSuojrtJN2Ypt", "text" : "First Task" }
{ "_id" : "NzrbdgDkjfopMhvTG", "text" : "Second Task" }
{ "_id" : "bo2Lmn8pYdc7SNnsJ", "text" : "Third Task" }
{ "_id" : "wtzuHKhyxdvkp6PaG", "text" : "Fourth Task" }
{ "_id" : "Eg3nK2PkAfC8p2ckJ", "text" : "Fifth Task" }
{ "_id" : "C5XCHP9QRN8HwopNa", "text" : "Sixth Task" }
{ "_id" : "Lz97hBMpqtTC57xEf", "text" : "Seventh Task" }

我确认TODO管理应用程序的数据已保存在MongoDB中。
然而,存在两个问题。

    • 課題1: データはどうやってサーバーからクライアント送られたの?

その仕組みは、以下機能2点と関係するようです(詳細は次回)

Publications(パブリケーション)
Subscriptions(サブスクリプション)

課題2: データベースのデータがクライアントに公開され丸見えだが大丈夫?

セキュリティ上よろしくないため、後で削除します

最后

下一次,我将继续改善TODO应用。
请敬请期待。

[Next] 第14次 Web3.0验证- 开发使用Meteor进行TODO管理应用程序(新增任务的功能)
广告
将在 10 秒后关闭
bannerAds