hello,先祝大家中秋快乐,吃嘛嘛香,该吃吃,该喝喝,有事别往心里搁.....
这是本人用谷歌翻译的meteor 的API(不错的,如果担心翻译问题可以对照双语),虽然Meteor在今年有比较大的变化,但是基本API仍保持。看起来应该比较方便吧。大概有10几篇,然后分几次发完。不用谢我,我是雷锋啊。。。API馅的“月饼”
方法
Meteor的方法(远程过程调用)API的文档。
在GitHub上编辑
方法是Meteor客户端可以用Meteor.call调用的远程函数。
定义可以由客户端通过网络调用的函数。
方法对象
字典的键是方法名和值是函数。
服务器上的调用方法定义了可由客户端远程调用的函数。 他们应该返回一个EJSON能够值或抛出一个异常。 在你的方法调用中,它被绑定到一个方法调用对象,它提供了以下内容:
sSimulation:布尔值,如果此调用是存根,则为true。
解锁:当被调用时,允许来自该客户端的下一个方法开始运行。
userId:当前用户的ID。
setUserId:将当前客户端与用户相关联的函数。
连接:在服务器上,接收此方法调用的连接。
客户端调用方法定义了与同名服务器方法相关的存根函数。 如果你不想要,你不必为你的方法定义一个存根。 在这种情况下,方法调用就像其他系统中的远程过程调用一样,您将不得不等待来自服务器的结果。
如果你定义了一个存根,当一个客户调用一个服务器方法时,它也将并行地运行它的存根。 在客户端上,存根的返回值被忽略。 存根的运行是因为它们的副作用:它们是为了模拟服务器方法的结果,而不是等待往返延迟。 如果存根引发异常,它将被记录到控制台。
你总是使用方法,因为数据库的mutators(insert,update,remove)是作为方法实现的。 当你在客户端上调用这些函数时,你正在调用它们的存根版本来更新本地缓存,并向服务器发送相同的写入请求。 服务器响应时,客户端使用服务器上实际发生的写入来更新本地缓存。
您不必将所有的方法定义放入一个Meteor.methods调用中;你可以多次调用它,只要每个方法有一个唯一的名字。
如果客户端在接收到响应之前调用某个方法并断开连接,则它将在重新连接时重新调用该方法。 这意味着一个客户可能多次调用一个方法,只能调用一次。 如果此行为对于您的方法有问题,请考虑为客户端上的每个方法调用附加唯一的ID,然后检查服务器是否已使用此ID进行调用。 或者,您可以使用Meteor.apply将noRetry选项设置为true。
在“流星指南”的“方法”文章中详细了解方法以及如何使用它们。
调用此方法的用户的ID,如果没有用户登录,则为null。
用户标识是一个任意字符串 -通常是数据库中用户记录的标识。 你可以用setUserId函数来设置它。 如果你使用流星帐户系统,那么这是为你处理。
设置登录的用户。
userId应在此连接上返回的值。
调用此函数可以更改在调用此方法的连接上当前登录的用户。 这只是简单的设置了这个连接上接收到的未来方法调用的userId的值。 通过null来注销连接。
如果您正在使用内置的Meteor帐户系统,则这应该对应于Meteor.users集合中文档的_id字段。
setUserId不具有追溯性。 它会影响当前的方法调用以及将来的方法调用。 之前任何调用此连接的方法仍会看到在启动时有效的userId的值。
如果您还想更改客户端上的登录用户,则在调用服务器上的setUserId后,请在客户端上调用Meteor.connection.setUserId(userId)。
在方法调用中访问。 布尔值,如果此调用是存根,则为true。
在方法调用中调用。 允许从这个客户端的后续方法开始运行在一个新的光纤。
在服务器上,来自给定客户端的方法一次运行一个。 直到第N次调用返回,第N + 1个来自客户端的调用才会启动。 不过,你可以通过调用this.unblock来改变它。 这将允许第N + 1个调用开始在新的光纤中运行。
在方法调用中访问。 这个方法被接收的连接。 如果方法不与连接关联,则返回null,例如。 服务器启动的方法调用。 调用由服务器方法创建的方法,而该方法又由客户端启动,共享相同的连接。
这个类表示一个方法抛出的符号错误。
唯一标识这种错误的字符串代码。 该方法的调用者应该使用该字符串来确定要采取的适当操作,而不是尝试解析原因或详细信息字段。 例如:
由于遗留的原因,一些内置的Meteor功能,如检查在这个领域的数字错误。
原因字符串
可选的。 一个简短的人类可读的错误摘要,如“未找到”。
细节字符串
可选的。 有关错误的其他信息,如文本堆栈跟踪。
如果你想从一个方法返回一个错误,抛出一个异常。 方法可以抛出任何一种异常。 但Meteor.Error是服务器发送给客户端的唯一错误。 如果一个方法函数抛出了一个不同的异常,那么它将被映射到一个消毒版本。 特别是,如果抛出错误的sanitizedError字段被设置为Meteor.Error,那么该错误将被发送到客户端。 否则,如果没有可用的清理版本,客户端将得到Meteor.Error(500,“内部服务器错误”)。
调用传递任意数量参数的方法。
name String
要调用的方法的名称
arg1,arg2 ... EJSON-able Object
可选的方法参数
asyncCallback函数
可选的回调函数,与方法完成后的错误或结果异步调用。 如果没有提供,方法尽可能同步运行(见下文)。
这是如何调用一个方法。 它将在服务器上运行该方法。 如果存根可用,它也将运行客户端上的存根。 (另请参阅Meteor.apply,与Meteor.call相同,不同之处在于您将参数指定为数组而不是单独的参数,您可以指定几个选项来控制方法的执行方式。
如果包含回调函数作为最后一个参数(不能是方法的参数,因为函数不是可序列化的),该方法将异步运行:它不会返回任何内容,也不会抛出异常。 当方法完成时(在Meteor.call返回之前可能发生或可能不发生),将使用两个参数调用回调:错误和结果。 如果发生错误,那么错误将是异常对象。 否则,错误将是未定义的,并且返回值(可能是未定义的)将被导致。
如果您没有在服务器上传递回调,方法调用将会阻塞,直到方法完成。 它最终将返回方法的返回值,或者如果方法抛出异常,则会抛出异常。 (如果发生远程异常,并且不是Meteor.Error异常,则可能映射到500服务器错误。)
在客户端,如果你没有传递一个回调,而你又不在一个存根内,那么调用将返回undefined,你将无法获得该方法的返回值。 这是因为客户端没有光纤,所以实际上没有任何方法可以阻止远程执行方法。
最后,如果你在客户端的一个存根(stub)中并调用另一个方法,那么另一个方法就不会被执行(不生成RPC,没有任何“真正的”发生)。 如果另一个方法有一个存根,该存根代表该方法并被执行。 方法调用的返回值是存根函数的返回值。 客户端在同步执行存根时没有问题,这就是为什么客户端可以在方法体内使用同步的Meteor.call表单,如前所述。
Meteor跟踪由客户端和服务器上的方法执行的数据库写入,并且不会调用asyncCallback,直到所有服务器的写入都替换了本地缓存中的存根的写入。 在某些情况下,可用的方法返回值与可见的写入之间可能存在滞后:例如,如果另一个尚未完成的方法写入同一文档,则本地缓存可能不是最新的,直到其他方法结束 以及。 如果您希望从服务器到达时立即处理方法的结果,即使方法的写入不可用,也可以为Meteor.apply指定onResultReceived回调。
调用一个传递参数数组的方法。
ARGUMENTS
name String
要调用的方法的名称
args EJSON对象的数组
方法参数
asyncCallback函数
可选回调; 与Meteor.call中相同的语义。
OPTIONS
等待布尔值
(仅限客户端)如果为true,那么在所有以前的方法调用完成之前不要发送此方法,并且在完成此方法调用之前不要发送任何后续方法调用。
onResultReceived函数
(仅限客户端)一旦错误或结果可用,就会使用该方法的错误或结果(就像asyncCallback)调用此回调。 本地缓存可能还不能反映该方法执行的写入。
noRetry布尔值
(仅限客户端)如果为true,则不要在重新加载时再次发送此方法,只需使用错误代码“invocation-failed”调用回调错误即可。
throwStubExceptions布尔值
(仅限客户端)如果为true,则方法存根引发的异常将被抛出而不是记录,并且方法将不会在服务器上调用。
Meteor.apply就像Meteor.call一样,除了方法参数是作为一个数组而不是直接作为参数传递的,你可以指定关于客户如何执行这个方法的选项。
DDPRateLimiter
自定义方法和订阅的速率限制。
默认情况下,DDPRateLimiter使用单个规则进行配置。 此规则将每次连接的登录尝试次数,新用户创建次数和密码重置次数限制为每10秒尝试5次。 它可以通过调用Accounts.removeDefaultRateLimit()来删除。
要使用DDPRateLimiter修改默认的速率限制规则,请将ddp-rate-limiter软件包添加到您的终端中的项目中:
添加与描述方法或订阅尝试的事件流相匹配的规则。每个事件都是具有以下属性的对象:
键入:“方法”或“订阅”
名称:被调用的方法或订阅的名称
userId:尝试该方法或订阅的用户标识
connectionId:表示用户的DDP连接的字符串
clientAddress:用户的IP地址
返回可以传递给removeRule的唯一ruleId。
ARGUMENTS
匹配器对象
匹配器指定哪些事件按照速率限制进行计数。匹配器是具有与上述事件对象相同属性的子集的对象。匹配器对象中的每个值都是以下值之一:
一个字符串:为了使事件满足匹配器,这个值必须等于事件对象中相同属性的值
一个函数:为了使事件满足匹配器,当传递事件对象中相同属性的值时,函数必须求值为真
以下是事件计数方式:每个满足匹配器筛选器的事件都被映射到一个存储桶。存储区是由匹配器和事件对象中存在的所有属性的事件对象的值唯一确定的。
numRequests数字
每个时间间隔允许的请求数量。默认= 10。
timeInterval编号
时间间隔(以毫秒为单位),之后重置规则的计数器。默认= 1000。
回调函数
函数在执行规则后被调用
自定义规则可以通过调用DDPRateLimiter.addRule来添加。 每个方法和订阅调用都会调用速率限制器。
当存储桶超过了规则的预定义容量时,就会达到速率限制,此时将为该输入返回错误,直到存储桶被重置为止。 时间间隔结束后,桶定期重置。
以下是定义规则并将其添加到DDPRateLimiter中的示例:
从速率限制器中删除指定的规则。 如果规则达到了限制,那么限制也会被删除。
ARGUMENTS
ID字符串
'ruleId'从addRule返回
超出方法或订阅速率限制时,设置错误消息文本。
ARGUMENTS
消息字符串或函数
函数被传入带有timeToReset字段的对象中,该字段指定毫秒数,直到允许下一个方法或订阅运行。 该函数必须返回一个错误信息的字符串。