【问题标题】:Meteor - call method from client & server methodMeteor - 从客户端和服务器方法调用方法
【发布时间】:2016-03-10 09:30:31
【问题描述】:

如果我从客户端和服务器共享的方法中调用另一个仅在服务器上的方法,会发生什么情况?它会被调用两次吗?只有一次来自服务器?客户只有一次?

//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 中)

【问题讨论】:

  • 方法只在服务器端。它们不在客户端上运行。客户端调用服务端方法
  • 这不是真的:方法在客户端运行以及模拟以提供更快的 UI 更新,当来自服务器的响应来时,比较结果,并根据服务器更新如果需要的话。 docs.meteor.com/#/full/meteor_methods
  • 只有在/server/if (Meteor.isServer) { ... } 中为服务器明确定义方法时才适用

标签: meteor meteor-methods


【解决方案1】:

是的,只在服务器上一次。

您可以使用this.isSimulation 包装共享方法的服务器部分

当您运行共享方法时,它首先在客户端上运行模拟,然后在服务器上运行 - 使用其结果更新客户端(通常是相同的 - 这就是它被称为 Optimistic UI 的原因)。

【讨论】:

  • 是的,我想知道模拟的界限有多大(它可以更改服务器响应无法修复的 UI 吗?这里:它可以调用其他方法吗?它可以调用外部脚本吗? ,例如日志记录指标等?)
  • 服务器响应只更新minimongo的状态(客户端中的mongo缓存)。不确定对外部脚本的调用。
  • 我刚刚测试过:如果您在方法中执行if (Meteor.isClient) {$.get('https://test.com/');},则会发出请求,因此不清楚为什么不从客户端运行Meteor.call(即使它是有道理的,因为方法在双方都运行,你可能不会,除了它的效果是乘法)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
相关资源
最近更新 更多