【问题标题】:Fetch latest data on client side from server in meteor app从流星应用程序中的服务器获取客户端的最新数据
【发布时间】:2016-08-20 10:48:55
【问题描述】:

我已经通过流星中的服务器代码创建了一个 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 就是你所追求的。阅读它。
  • 非常感谢 masterAM..works :)

标签: node.js mongodb meteor


【解决方案1】:

为了完整起见,这里有一个使用您的代码的快速修改示例,展示了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',
      });
    }
  });
}

上面将首先将undefined 记录到您的控制台,因为当首次调用Restaurants.findOne 时,尚未将餐厅数据推送到客户端。通过将您的 find 包装在 Tracker.autorun 中,当餐厅数据被推送到客户端时,您的 find 将重新运行,并且加载的餐厅将被记录到控制台。所以你的控制台输出看起来像:

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

【讨论】:

    猜你喜欢
    • 2015-04-18
    • 2015-09-30
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    相关资源
    最近更新 更多