16

http://docs.meteor.com/#meteor_methods

我已经在我的服务器文件夹中的 publish.js 中尝试过它。

我成功调用 Meteor.apply 并尝试从客户端调用服务器。我总是得到一个未定义的响应。

4

4 回答 4

27

在服务器上调用Meteor.methods是正确的。这将定义在特权环境中运行并将结果返回给客户端的远程方法。要返回正常结果,只需return使用一些 JSON 值从您的方法函数调用。要发出错误信号,请抛出Meteor.Error.

在客户端,Meteor.apply总是返回undefined,因为方法调用是异步的。如果你想要方法的返回值,最后一个参数apply应该是一个回调,它将被传递两个参数:errorresult,在典型的异步回调样式中。

你的服务器代码真的被调用了吗?您可以通过更新方法中的数据库并查看客户端的缓存是否获取新数据,或console.log从方法主体内部调用并查看终端中“流星”进程的输出来检查这一点。

于 2012-04-14T20:02:44.180 回答
20

有几个地方我可以定义我的Meteor.methods()(有赞成和反对的):

  1. 仅在服务器上- 当客户端调用该方法时,它必须等待服务器响应,然后客户端发生任何更改
  2. 在服务器上,并在客户端使用一个存根——当客户端调用该方法时,它会在客户端执行存根方法,它可以快速返回一个(预测的)响应。当服务器返回“实际”响应时,它将替换存根生成的响应并相应地更新其他元素。
  3. 客户端和服务器上的相同方法- 通常用于处理集合的方法,其中该方法实际上是客户端的存根,但此存根与服务器端函数相同,而是使用客户端缓存的集合服务器的。所以它仍然会像存根一样立即更新,但我想它的猜测更准确一些。
于 2015-01-14T16:16:43.340 回答
8

我在这里上传了一个简短的例子,如果你需要一个这样的工作例子:https ://gist.github.com/2387816

于 2012-04-14T21:06:32.217 回答
4

我希望有些人会发现这个添加的用途,这并没有掩盖方法主要用于在服务器上运行的问题,正如debergalis所解释的那样。

在客户端上使用Meteor.methods()也很有用。(也在该部分中寻找“存根Meteor.call()” ......)这允许客户端(同步)模拟服务器调用的预期效果。如文档中所述:

您一直在使用方法,因为数据库修改器(插入、更新、删除)是作为方法实现的。(...)

一个单独的部分解释在客户端上使用存根可能有助于理解服务器上的方法调用。

于 2013-02-14T00:28:53.220 回答