Метод Meteor.call () - Meteor.js

  1. Когда использовать метод Meteor.call () только для запроса на стороне клиента или сервера. пожалуйста, порекомендуйте
  2. В моем приложении Meteor.users () отображает всех пользователей в консоли. Как это отключить.

person Vikram Sethumadhavan    schedule 30.08.2016    source источник


Ответы (2)


  1. Вы должны использовать Meteor.call () на стороне клиента для вызова метода на стороне сервера. В Meteor есть отличная документация о методах.

  2. Если Meteor.users () возвращает всех пользователей на стороне клиента, то сервер публикует все документы пользователей. Удаляли ли вы пакет autopublish (meteor remove autopublish) метеора после установки?

person Matt    schedule 30.08.2016
comment
Я уже удалил автопубликацию, но все коллекции публикуются - person Vikram Sethumadhavan; 30.08.2016
comment
Этого не должно быть, если вы удалили пакет, если только нет другого пакета, публикующего коллекцию пользователей. Не могли бы вы поделиться своим файлом .meteor / versions и убедиться, что у вас нет серверного кода, публикующего коллекцию пользователей через Meteor.publish ('users')? - person Matt; 30.08.2016

1. Meteor.call ()

Meteor.call() обычно используется для вызова серверных методов со стороны клиента. Однако вы также можете использовать Meteor.call() на стороне сервера для вызова другой функции на стороне сервера, хотя это не рекомендуется.

Итак, есть два способа использовать Meteor.call()

  • Вызов клиента на сервер (хорошая практика)
  • Вызов сервера на сервер (не очень хорошая практика, но работает)

Вот что вкратце говорится в документации Meteor:

Этот метод вызывается с клиента и сервера с помощью Meteor.call. Обратите внимание, что вы должны использовать метод только в том случае, когда некоторый код должен быть вызван клиентом; если вы просто хотите модулировать код, который будет вызываться только с сервера, используйте обычную функцию JavaScript, а не метод.

2. Публикации и подписки

Чтобы убедиться, что ваши данные в безопасности, вам необходимо удалить пакеты autopublish и insecure. Это отключит автоматические публикации ваших коллекций, а также запретит свободный доступ для записи в вашу базу данных со стороны клиента.

Теперь, чтобы убедиться, что вы публикуете только ту часть коллекции, которая вам нужна, вам нужно настроить свои публикации (или изучить их, если они уже настроены).

Публикации: это то, что передает коллекции вашей базы данных от сервера к клиенту.

Это будет выглядеть примерно так, ищите его в ваших api или server папках внутри вашего проекта:

Meteor.publish('allUsers', function() {
  if (!this.userId) {
    return this.ready();
  }
  return Meteor.users.find({});
});

Обратите внимание, что в приведенном выше примере мы не предоставили никакого параметра фильтра в вызове MongoDB, поэтому эта публикация вернет курсор, содержащий всех пользователей из вашей базы данных.

Meteor.publish('currentUser', function() {
  if (!this.userId) {
    return this.ready();
  }
  return Meteor.users.find({
    _id: this.userId
  });
});

В этой публикации мы предоставили поле user _id в качестве фильтра. Таким образом, это вернет курсор forMeteor.users(), имеющий только текущий пользовательский объект в качестве доступного элемента.

Подписки. Чтобы получить доступ к своим публикациям, вам необходимо соответственно вызвать подписку в коде на стороне клиента, например:

Meteor.subscribe('currentUser');

Убедитесь, что вы не подписались на allUsers одновременно, потому что несколько подписок предоставят объединенный набор обеих подписок. Таким образом, в вашем клиентском мини-монго будет currentUser + allUsers = allUsers. Мы этого не хотим.

После того, как вы проверили вышеуказанное, вы можете использовать Meteor.users() в своем клиентском коде (или вашей консоли) и обнаружить, что он будет содержать только пользовательские данные вашего текущего вошедшего в систему пользователя.

См. Официальную документацию для получения дополнительных сведений о публикациях и подписках.

person ryder    schedule 30.08.2016