繁体   English   中英

从流星应用中的服务器上获取客户端的最新数据

[英]Fetch latest data on client side from server in meteor app

我已经通过流星中的服务器代码创建了一个mongoDB集合:

//Server
Restaurants = new Mongo.Collection('restaurants')   
if (Meteor.isServer) {
    //This code only runs on the server
    Meteor.publish('restaurants', function () {
    return Restaurants.find();
  }); 
}

每当数据库中的数据更改时,我都试图在客户端获取最新数据。

这是我的客户端代码:

//Client
Restaurants = new Mongo.Collection('restaurants');
var myData = "";

if (Meteor.isClient) {

    Meteor.subscribe('restaurants');        
    myData = Restaurants.find();
};  

感谢您!

为了完整起见,这是一个使用您的代码的快速修订示例,该示例显示了Tracker工作方式。

Restaurants = new Mongo.Collection('restaurants')

if (Meteor.isClient) {
  Meteor.subscribe('restaurants');
  Tracker.autorun(() => {
    const restaurant = Restaurants.findOne();
    console.log(restaurant);
  });
};

if (Meteor.isServer) {
  Meteor.publish('restaurants', function restaurants() {
    return Restaurants.find();
  });

  Meteor.startup(() => {
    if (Restaurants.find().count() === 0) {
      Restaurants.insert({
        name: 'McDonalds',
      });
    }
  });
}

由于首次调用Restaurants.findOne时,尚未将任何餐厅数据推送到客户端,因此以上内容将首先undefined日志记录到控制台。 通过将查找的内容包装在Tracker.autorun ,当将餐厅数据推送到客户端时,您的查找将重新运行,并且已加载的餐厅将被记录到控制台。 因此,您的控制台输出将如下所示:

undefined
Object {_id: "HAJpQxfq59KPmTwDA", name: "McDonalds"}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM