0

私は Meteor を初めて使用し、非 Web ベースのサーバーに接続して Meteor アプリを書き始めました。すべてのデータはこのサーバーを介してルーティングされる必要があるため、関連するオブジェクトを取得して操作するための REST インターフェイスがあります。

今、この Web サービスのコレクションを作成する方法に行き詰まっています。ここに示すアプローチを使用しようとしました: https://medium.com/meteor-js/how-to-connect-meteor-js-to-an-external-api-93c0d856433b

これは、現在の結果を取得するために機能します。しかし、レコードを追加/削除/更新すると、まったく更新されません。

サーバー側では、次のように公開しています。

Meteor.publish('someThings', function() {
    var self = this;

    try {
        var records = HTTP.get("http://localhost:6789/things/", {auth: "user:passwd"});

        _.each(records.data, function(record) {

            var thing = {
                uuid: record.uuid,
                title: record.title,
            };

            self.added('things', thing.uuid, thing);
        });

        self.ready();
    } catch (error) {
        console.log(error);
    }
  }
);

それからグローバルに、私はコレクションを持っています:

SomeThings = new Meteor.Collection("things");

そして、React コンポーネントで次のように使用します。

SomeThings = new Meteor.Collection("things");

getMeteorData() {
    return {
      things: SomeThings.find({}).fetch()
    };
  },

クライアントのどこかに、これを追加しました(ハウツーのように):

  Tracker.autorun(function() {
      Meteor.subscribe('someThings');
  });

最後に、サーバー側には、操作を行う関数がいくつかあります。REST インターフェイスを介して 1 回、コレクションで 1 回 (例: 挿入):

addThing: function(title) {
  result = Meteor.http.post("http://localhost:6789/things/",
    {auth: "user:passwd", params: {title:title}});
  SomeThings.insert(result.data);
}

added()関数と同様の関数について何かを読みましMeteor.publish()たが、これを使用してサーバーとクライアントの間、またはコレクションと UI 要素の間で「即時」同期を有効にする方法/かどうかを理解できませんでした。

基本的に、データベースではなくRESTインターフェースに基づくリアクティブコレクションを構築する方法を知りたいです。

どうすればこれを達成できるかについて、誰かがアドバイス/ヒントをくれますか?

4

2 に答える 2

1

パブリケーションは、HTTP 要求を自動的に再実行しません。API のデータがいつ変更されたかを何らかの方法で検出し (簡単な方法は でクエリを実行することですMeteor.setInterval)、 を呼び出しthis.updatedthis.removedクライアントに変更を通知する必要があります。

于 2015-09-23T00:32:46.967 に答える
0

よくわかりませんが、サブスクライブしていると思いますが、公開されることはありません (そして、サーバー側でplantaTasks公開されています)。someThings

于 2015-09-22T20:57:06.010 に答える