应该在哪里定义Meteor.methods()?

时间:2012-04-14 17:51:41

标签: meteor

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

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

我成功调用Meteor.apply并尝试从客户端调用服务器。我总是得到一个不明确的回应。

4 个答案:

答案 0 :(得分:27)

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

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

您的服务器代码是否真的被调用了?您可以通过更新方法中的数据库并查看客户端的缓存是否获取新数据,或者从方法体内调用console.log并查看终端中“meteor”进程的输出来检查。 / p>

答案 1 :(得分:20)

有几个地方我可以定义我的Meteor.methods()(与专家和骗子):

  1. 仅限服务器 - 当客户端调用该方法时,它必须等待服务器响应才能在客户端发生任何更改
  2. 在服务器上,并在客户端上使用存根 - 当客户端调用该方法时,它将在客户端执行存根方法,这可以快速返回(预测的)响应。当服务器回来时,实际的'响应,它将替换存根生成的响应并更新其他元素。
  3. 客户端和服务器上的相同方法 - 常用于处理集合的方法,其中方法实际上是客户端的存根,但此存根与服务器相同 - 辅助功能,并使用客户端的缓存集合而不是服务器的集合。所以它似乎仍然会立即更新,就像存根一样,但我猜它在猜测时会更准确。

答案 2 :(得分:8)

我在这里上传了一个简短的例子,如果您需要一个有效的例子:https://gist.github.com/2387816

答案 3 :(得分:4)

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

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

  

你一直使用方法,因为数据库变异器(插入,   update,remove)作为方法实现。 (...)

解释在客户端上使用存根的单独部分可以简化对服务器上方法调用的理解。

相关问题