0

我对 Meteor 很陌生,并开始编写一个连接到非基于 Web 的服务器的流星应用程序。由于所有数据都应通过此服务器进行路由,因此它具有用于获取和操作相关对象的 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()
    };
  },

在客户端的某个地方,我另外添加了这个(如在howto中):

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

最后在服务器端,我有一些函数可以进行操作,一次通过 REST 接口,一次在集合上(例如:插入):

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 中的数据何时发生更改(简单的方法是在 a 上运行查询Meteor.setInterval)并调用this.updatedthis.removed通知客户端更改。

于 2015-09-23T00:32:46.967 回答
0

我不确定,但我猜您订阅的plantaTasks内容从未发布(并且您someThings在服务器端发布)。

于 2015-09-22T20:57:06.010 回答