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

Jos*_*itt 16 meteor

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

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

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

deb*_*lis 27

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

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

您的服务器代码实际上是否被调用?您可以通过更新方法中的DB并查看客户端的缓存是否获取新数据,或者console.log从方法体内调用并查看终端中"meteor"进程的输出来检查.

  • `server`文件夹中的任何`.js`文件都可以.该文件夹中的JavaScript文件只是在服务器上加载并运行.它们不会*发送给客户. (2认同)

d4n*_*yll 20

有几个地方我可以定义我Meteor.methods()(与pro和con):

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

  • 那么为什么有人想在使用选项3时使用选项2呢? (2认同)
  • @adrianmc因为有时您可能在您的方法中使用您不希望客户端知道的秘密信息. (2认同)

小智 8

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