Получить последние данные на стороне клиента с сервера в метеорном приложении

node.js mongodb meteor

92 просмотра

1 ответ

Я создал коллекцию 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();
};  

Благодарю вас!

Автор: David Источник Размещён: 08.11.2019 11:12

Ответы (1)


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первом вызове данные ресторана еще не были переданы клиенту. Обернув свою находку в a Tracker.autorun, когда данные ресторана передаются клиенту, ваша находка будет повторно запущена, и загруженный ресторан будет зарегистрирован на консоли. Таким образом, ваш вывод на консоль будет выглядеть так:

undefined
Object {_id: "HAJpQxfq59KPmTwDA", name: "McDonalds"}
Автор: hwillson Размещён: 21.08.2016 01:57
Вопросы из категории :
32x32