2016-03-10 2 views
1

Что произойдет, если из метода, который совместно используется клиентом и сервером, я вызываю другой метод только на сервере? Будет ли это вызвано дважды? Только один раз с сервера? Только один раз от клиента?Meteor - метод вызова от метода client & server

//lib/methods.js 
Meteor.methods({ 
    test: function() { 
    /*do some stuff that needs to update the UI quickly*/ 
    Meteor.call('doSomeSecureStuff', Meteor.isClient); 
    } 
}); 

//server/methods.js 
import secureStuff from './secureStuff.js'; 
Meteor.methods({ 
    doSomeSecureStuff: function(originIsClient) { 
    console.log(originIsClient); 
    secureStuff(); 
    } 
}); 

Из моих тестов он только вызывается один раз с сервера, но так как я не нашел не документ о том, что я хотел, чтобы убедиться, что 1) это то, что на самом деле произошло, и 2) будет оставаться, как это в будущее

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

+0

Способы применяются только на стороне сервера. они не работают на клиенте. клиент вызывает метод сервера – MrE

+1

Это неверно: методы, запущенные на клиенте, а также симуляция, чтобы обеспечить более быстрое обновление пользовательского интерфейса, а когда приходит ответ от сервера, результаты сравниваются и обновляются в соответствии с сервером, если необходимо. http://docs.meteor.com/#/full/meteor_methods – Guig

+0

Это справедливо только в том случае, если вы явно определяете свои методы для сервера, либо в '/ server /', либо в 'if (Meteor.isServer) {... } ' – Guig

ответ

3

Да, только один раз на сервере.

Вы можете обернуть серверную часть общего метода с this.isSimulation

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

+0

Да, мне было интересно, как ограничено симуляция (может ли он изменить интерфейс, что ответ сервера не сможет исправить? Здесь: может ли он вызывать другие методы? Может ли он выполнять вызов внешних скриптов, таких как показатели ведения журнала и т. Д. ?) – Guig

+0

Ответ сервера только обновляет состояние minimongo (кэш монго в клиенте). Не уверен в вызовах внешних скриптов. – sys13

+0

Я только что протестировал: если вы делаете 'if (Meteor.isClient) {$ .get ('https://test.com/');}' внутри вашего метода, запрос делается, поэтому неясно, почему ' Meteor.call' не запускается с клиента (даже если это имеет смысл, потому что метод работает с обеих сторон, вы можете не исключать его эффекта для умножения) – Guig

Смежные вопросы