В чем разница между публикацией / подпиской и методом?где / когда мы используем метод и публикуем / подписываемся? - PullRequest
0 голосов
/ 23 ноября 2018

Сегодня я пытаюсь работать на метеоре и получаю сообщение о сбое данных со страницы сервера.

Я пытаюсь найти его на стороне Google и метеора, но есть два способа получить данные publish / subscribeи Method

У меня есть код ниже, я не знал, как написать его на стороне метеорного сервера и получить эти данные на стороне клиента

function (x)
{
var y =2
var z  = y*x
return z;
}

Теперь я хочувызовите этот метод на стороне клиента

Ответы [ 3 ]

0 голосов
/ 25 ноября 2018

В чем разница между публикацией / подпиской и методом?где / когда мы используем метод и публикуем / подписываемся?

Так что если вам нужна логика, вам не нужен pub / sub.Методы предназначены для логического публикации / подписки для обработки данных.

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

С другой стороны, согласно вашему примеру, вам не нужны никакие данные, поэтому я пропущу их.

Я настоятельно рекомендую использовать проверенные методы:

https://github.com/meteor/validated-method

Теперь давайте перейдем к примерам

Представьте, что у вас есть метод

export const calculate = new ValidatedMethod({
  name: 'logic.calculate', // methods are usually named like this
  validate: new SimpleSchema({ // use SimpleSchema to autovalidate parameters
    x: {
      type: Number
    }
  }).validator(),
  run({ x }) {
    const y = 2;
    return y*x;
  }
});

На заметку: 1. Файл должен быть импортирован на сервер куда-нибудь.2. Вам нужно использовать проверку

Теперь вызовите ее на клиенте

Meteor.call('logic.calculate', { x }, (error, result) => {
  if (error) {
    do something
  }
  console.log(result);
});

Кроме того, вы можете напрямую импортировать метод и вызывать его следующим образом:

import { calculate } from '../../api/logic/methods';// use real method path here   

calculate.call({ x }, (error, result) => {
     if (error) {
        do something
     }
     console.log(result);
});

Обратите внимание, что для проверенных методов аргумент является объектом

0 голосов
/ 29 ноября 2018

В метеоре мы можем создать метеорный метод и можем передавать данные на сторону клиента на Meteor.call('methodName', 'param').Но в случае асинхронной работы нам нужно использовать будущее.Посмотрите на приведенный ниже пример:

Future = Npm.require('fibers/future');

Meteor.methods({
  foo: function() {
    const future = new Future();
    someAsyncCall(foo, function bar(error, result) {
      if (error) future.throw(error);
      future.return(result);
    });
    // Execution is paused until callback arrives
    const ret = future.wait(); // Wait on future not Future
    return ret;
  }
});
0 голосов
/ 23 ноября 2018

При публикации / подписке вы отслеживаете собранные данные.https://docs.meteor.com/api/pubsub.html

Согласно документации:

Методы - это удаленные функции, которые клиенты Meteor могут вызывать с помощью Meteor.call.

Итак, чтобы ответитьпоследний вопрос: чтобы вызвать вашу функцию со стороны клиента, вы должны использовать "Meteor.call ('yourMethodName', необязательный CallBacks);"

РЕДАКТИРОВАТЬ:

ОК, как это предлагается в комментарияхВот пример с вашей функцией.На стороне сервера, скажем, в файле с именем "method.js" или что-то вроде:

import { Meteor } from 'meteor/meteor';

Meteor.methods({
  myMethod(x) {
    const y = 2;
    const z = y * x;
    return z;
  }
});

, тогда на стороне клиента вы можете вызвать этот метод, например:

Meteor.call('myMethod', x, (error, result) => {
  // OPTIONAL CALLBACK RESULT
  console.log(error, result);
});

Аргументы здесь, соответственно, имя метода, переменная с именем x, обратный вызов.

...