Meteor API Methods

?hello,先祝大家中秋快樂,吃嘛嘛香,該吃吃,該喝喝,有事別往心里擱.....

這是本人用谷歌翻譯的meteor 的API(不錯的,如果擔(dān)心翻譯問題可以對照雙語),雖然Meteor在今年有比較大的變化,但是基本API仍保持。看起來應(yīng)該比較方便吧。大概有10幾篇,然后分幾次發(fā)完。不用謝我,我是雷鋒啊。。。API餡的“月餅”

方法

Meteor的方法(遠(yuǎn)程過程調(diào)用)API的文檔。

??在GitHub上編輯

方法是Meteor客戶端可以用Meteor.call調(diào)用的遠(yuǎn)程函數(shù)。

定義可以由客戶端通過網(wǎng)絡(luò)調(diào)用的函數(shù)。

方法對象

字典的鍵是方法名和值是函數(shù)。

服務(wù)器上的調(diào)用方法定義了可由客戶端遠(yuǎn)程調(diào)用的函數(shù)。 他們應(yīng)該返回一個EJSON能夠值或拋出一個異常。 在你的方法調(diào)用中,它被綁定到一個方法調(diào)用對象,它提供了以下內(nèi)容:

sSimulation:布爾值,如果此調(diào)用是存根,則為true。

解鎖:當(dāng)被調(diào)用時,允許來自該客戶端的下一個方法開始運行。

userId:當(dāng)前用戶的ID。

setUserId:將當(dāng)前客戶端與用戶相關(guān)聯(lián)的函數(shù)。

連接:在服務(wù)器上,接收此方法調(diào)用的連接。

客戶端調(diào)用方法定義了與同名服務(wù)器方法相關(guān)的存根函數(shù)。 如果你不想要,你不必為你的方法定義一個存根。 在這種情況下,方法調(diào)用就像其他系統(tǒng)中的遠(yuǎn)程過程調(diào)用一樣,您將不得不等待來自服務(wù)器的結(jié)果。

如果你定義了一個存根,當(dāng)一個客戶調(diào)用一個服務(wù)器方法時,它也將并行地運行它的存根。 在客戶端上,存根的返回值被忽略。 存根的運行是因為它們的副作用:它們是為了模擬服務(wù)器方法的結(jié)果,而不是等待往返延遲。 如果存根引發(fā)異常,它將被記錄到控制臺。

你總是使用方法,因為數(shù)據(jù)庫的mutators(insert,update,remove)是作為方法實現(xiàn)的。 當(dāng)你在客戶端上調(diào)用這些函數(shù)時,你正在調(diào)用它們的存根版本來更新本地緩存,并向服務(wù)器發(fā)送相同的寫入請求。 服務(wù)器響應(yīng)時,客戶端使用服務(wù)器上實際發(fā)生的寫入來更新本地緩存。

您不必將所有的方法定義放入一個Meteor.methods調(diào)用中;你可以多次調(diào)用它,只要每個方法有一個唯一的名字。

如果客戶端在接收到響應(yīng)之前調(diào)用某個方法并斷開連接,則它將在重新連接時重新調(diào)用該方法。 這意味著一個客戶可能多次調(diào)用一個方法,只能調(diào)用一次。 如果此行為對于您的方法有問題,請考慮為客戶端上的每個方法調(diào)用附加唯一的ID,然后檢查服務(wù)器是否已使用此ID進(jìn)行調(diào)用。 或者,您可以使用Meteor.apply將noRetry選項設(shè)置為true。

在“流星指南”的“方法”文章中詳細(xì)了解方法以及如何使用它們。

調(diào)用此方法的用戶的ID,如果沒有用戶登錄,則為null。

用戶標(biāo)識是一個任意字符串?-通常是數(shù)據(jù)庫中用戶記錄的標(biāo)識。 你可以用setUserId函數(shù)來設(shè)置它。 如果你使用流星帳戶系統(tǒng),那么這是為你處理。

設(shè)置登錄的用戶。

userId應(yīng)在此連接上返回的值。

調(diào)用此函數(shù)可以更改在調(diào)用此方法的連接上當(dāng)前登錄的用戶。 這只是簡單的設(shè)置了這個連接上接收到的未來方法調(diào)用的userId的值。 通過null來注銷連接。

如果您正在使用內(nèi)置的Meteor帳戶系統(tǒng),則這應(yīng)該對應(yīng)于Meteor.users集合中文檔的_id字段。

setUserId不具有追溯性。 它會影響當(dāng)前的方法調(diào)用以及將來的方法調(diào)用。 之前任何調(diào)用此連接的方法仍會看到在啟動時有效的userId的值。

如果您還想更改客戶端上的登錄用戶,則在調(diào)用服務(wù)器上的setUserId后,請在客戶端上調(diào)用Meteor.connection.setUserId(userId)。

在方法調(diào)用中訪問。 布爾值,如果此調(diào)用是存根,則為true。

在方法調(diào)用中調(diào)用。 允許從這個客戶端的后續(xù)方法開始運行在一個新的光纖。

在服務(wù)器上,來自給定客戶端的方法一次運行一個。 直到第N次調(diào)用返回,第N + 1個來自客戶端的調(diào)用才會啟動。 不過,你可以通過調(diào)用this.unblock來改變它。 這將允許第N + 1個調(diào)用開始在新的光纖中運行。

在方法調(diào)用中訪問。 這個方法被接收的連接。 如果方法不與連接關(guān)聯(lián),則返回null,例如。 服務(wù)器啟動的方法調(diào)用。 調(diào)用由服務(wù)器方法創(chuàng)建的方法,而該方法又由客戶端啟動,共享相同的連接。

這個類表示一個方法拋出的符號錯誤。

唯一標(biāo)識這種錯誤的字符串代碼。 該方法的調(diào)用者應(yīng)該使用該字符串來確定要采取的適當(dāng)操作,而不是嘗試解析原因或詳細(xì)信息字段。 例如:

由于遺留的原因,一些內(nèi)置的Meteor功能,如檢查在這個領(lǐng)域的數(shù)字錯誤。

原因字符串

可選的。 一個簡短的人類可讀的錯誤摘要,如“未找到”。

細(xì)節(jié)字符串

可選的。 有關(guān)錯誤的其他信息,如文本堆棧跟蹤。

如果你想從一個方法返回一個錯誤,拋出一個異常。 方法可以拋出任何一種異常。 但Meteor.Error是服務(wù)器發(fā)送給客戶端的唯一錯誤。 如果一個方法函數(shù)拋出了一個不同的異常,那么它將被映射到一個消毒版本。 特別是,如果拋出錯誤的sanitizedError字段被設(shè)置為Meteor.Error,那么該錯誤將被發(fā)送到客戶端。 否則,如果沒有可用的清理版本,客戶端將得到Meteor.Error(500,“內(nèi)部服務(wù)器錯誤”)。

調(diào)用傳遞任意數(shù)量參數(shù)的方法。

name String

要調(diào)用的方法的名稱

arg1,arg2 ... EJSON-able Object

可選的方法參數(shù)

asyncCallback函數(shù)

可選的回調(diào)函數(shù),與方法完成后的錯誤或結(jié)果異步調(diào)用。 如果沒有提供,方法盡可能同步運行(見下文)。

這是如何調(diào)用一個方法。 它將在服務(wù)器上運行該方法。 如果存根可用,它也將運行客戶端上的存根。 (另請參閱Meteor.apply,與Meteor.call相同,不同之處在于您將參數(shù)指定為數(shù)組而不是單獨的參數(shù),您可以指定幾個選項來控制方法的執(zhí)行方式。

如果包含回調(diào)函數(shù)作為最后一個參數(shù)(不能是方法的參數(shù),因為函數(shù)不是可序列化的),該方法將異步運行:它不會返回任何內(nèi)容,也不會拋出異常。 當(dāng)方法完成時(在Meteor.call返回之前可能發(fā)生或可能不發(fā)生),將使用兩個參數(shù)調(diào)用回調(diào):錯誤和結(jié)果。 如果發(fā)生錯誤,那么錯誤將是異常對象。 否則,錯誤將是未定義的,并且返回值(可能是未定義的)將被導(dǎo)致。

如果您沒有在服務(wù)器上傳遞回調(diào),方法調(diào)用將會阻塞,直到方法完成。 它最終將返回方法的返回值,或者如果方法拋出異常,則會拋出異常。 (如果發(fā)生遠(yuǎn)程異常,并且不是Meteor.Error異常,則可能映射到500服務(wù)器錯誤。)

在客戶端,如果你沒有傳遞一個回調(diào),而你又不在一個存根內(nèi),那么調(diào)用將返回undefined,你將無法獲得該方法的返回值。 這是因為客戶端沒有光纖,所以實際上沒有任何方法可以阻止遠(yuǎn)程執(zhí)行方法。

最后,如果你在客戶端的一個存根(stub)中并調(diào)用另一個方法,那么另一個方法就不會被執(zhí)行(不生成RPC,沒有任何“真正的”發(fā)生)。 如果另一個方法有一個存根,該存根代表該方法并被執(zhí)行。 方法調(diào)用的返回值是存根函數(shù)的返回值。 客戶端在同步執(zhí)行存根時沒有問題,這就是為什么客戶端可以在方法體內(nèi)使用同步的Meteor.call表單,如前所述。

Meteor跟蹤由客戶端和服務(wù)器上的方法執(zhí)行的數(shù)據(jù)庫寫入,并且不會調(diào)用asyncCallback,直到所有服務(wù)器的寫入都替換了本地緩存中的存根的寫入。 在某些情況下,可用的方法返回值與可見的寫入之間可能存在滯后:例如,如果另一個尚未完成的方法寫入同一文檔,則本地緩存可能不是最新的,直到其他方法結(jié)束 以及。 如果您希望從服務(wù)器到達(dá)時立即處理方法的結(jié)果,即使方法的寫入不可用,也可以為Meteor.apply指定onResultReceived回調(diào)。

調(diào)用一個傳遞參數(shù)數(shù)組的方法。

ARGUMENTS

name String

要調(diào)用的方法的名稱

args EJSON對象的數(shù)組

方法參數(shù)

asyncCallback函數(shù)

可選回調(diào);?與Meteor.call中相同的語義。

OPTIONS

等待布爾值

(僅限客戶端)如果為true,那么在所有以前的方法調(diào)用完成之前不要發(fā)送此方法,并且在完成此方法調(diào)用之前不要發(fā)送任何后續(xù)方法調(diào)用。

onResultReceived函數(shù)

(僅限客戶端)一旦錯誤或結(jié)果可用,就會使用該方法的錯誤或結(jié)果(就像asyncCallback)調(diào)用此回調(diào)。 本地緩存可能還不能反映該方法執(zhí)行的寫入。

noRetry布爾值

(僅限客戶端)如果為true,則不要在重新加載時再次發(fā)送此方法,只需使用錯誤代碼“invocation-failed”調(diào)用回調(diào)錯誤即可。

throwStubExceptions布爾值

(僅限客戶端)如果為true,則方法存根引發(fā)的異常將被拋出而不是記錄,并且方法將不會在服務(wù)器上調(diào)用。

Meteor.apply就像Meteor.call一樣,除了方法參數(shù)是作為一個數(shù)組而不是直接作為參數(shù)傳遞的,你可以指定關(guān)于客戶如何執(zhí)行這個方法的選項。

DDPRateLimiter

自定義方法和訂閱的速率限制。

默認(rèn)情況下,DDPRateLimiter使用單個規(guī)則進(jìn)行配置。 此規(guī)則將每次連接的登錄嘗試次數(shù),新用戶創(chuàng)建次數(shù)和密碼重置次數(shù)限制為每10秒嘗試5次。 它可以通過調(diào)用Accounts.removeDefaultRateLimit()來刪除。

要使用DDPRateLimiter修改默認(rèn)的速率限制規(guī)則,請將ddp-rate-limiter軟件包添加到您的終端中的項目中:

添加與描述方法或訂閱嘗試的事件流相匹配的規(guī)則。每個事件都是具有以下屬性的對象:

鍵入:“方法”或“訂閱”

名稱:被調(diào)用的方法或訂閱的名稱

userId:嘗試該方法或訂閱的用戶標(biāo)識

connectionId:表示用戶的DDP連接的字符串

clientAddress:用戶的IP地址

返回可以傳遞給removeRule的唯一ruleId。

ARGUMENTS

匹配器對象

匹配器指定哪些事件按照速率限制進(jìn)行計數(shù)。匹配器是具有與上述事件對象相同屬性的子集的對象。匹配器對象中的每個值都是以下值之一:

一個字符串:為了使事件滿足匹配器,這個值必須等于事件對象中相同屬性的值

一個函數(shù):為了使事件滿足匹配器,當(dāng)傳遞事件對象中相同屬性的值時,函數(shù)必須求值為真

以下是事件計數(shù)方式:每個滿足匹配器篩選器的事件都被映射到一個存儲桶。存儲區(qū)是由匹配器和事件對象中存在的所有屬性的事件對象的值唯一確定的。

numRequests數(shù)字

每個時間間隔允許的請求數(shù)量。默認(rèn)= 10。

timeInterval編號

時間間隔(以毫秒為單位),之后重置規(guī)則的計數(shù)器。默認(rèn)= 1000。

回調(diào)函數(shù)

函數(shù)在執(zhí)行規(guī)則后被調(diào)用

自定義規(guī)則可以通過調(diào)用DDPRateLimiter.addRule來添加。 每個方法和訂閱調(diào)用都會調(diào)用速率限制器。

當(dāng)存儲桶超過了規(guī)則的預(yù)定義容量時,就會達(dá)到速率限制,此時將為該輸入返回錯誤,直到存儲桶被重置為止。 時間間隔結(jié)束后,桶定期重置。

以下是定義規(guī)則并將其添加到DDPRateLimiter中的示例:

從速率限制器中刪除指定的規(guī)則。 如果規(guī)則達(dá)到了限制,那么限制也會被刪除。

ARGUMENTS

ID字符串

'ruleId'從addRule返回

超出方法或訂閱速率限制時,設(shè)置錯誤消息文本。

ARGUMENTS

消息字符串或函數(shù)

函數(shù)被傳入帶有timeToReset字段的對象中,該字段指定毫秒數(shù),直到允許下一個方法或訂閱運行。 該函數(shù)必須返回一個錯誤信息的字符串。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,973評論 19 139
  • 隔閡·標(biāo)簽 柯曉東現(xiàn)在純乎是一個他人眼中的完美男人了。他在家不違逆父母,在外努力順應(yīng)他人的要求,從不與人吵嘴,只是...
    水鐸閱讀 425評論 0 1
  • 歡迎來到簡書網(wǎng)。 在這留下的第一篇文字就敘敘事吧。 很早就有看到簡書網(wǎng)的文字,各種標(biāo)注著轉(zhuǎn)載自簡書網(wǎng)的“心靈雞湯”...
    缺乏上進(jìn)心的夢語閱讀 595評論 0 1
  • 01關(guān)節(jié)彈響的定義是什么? 關(guān)節(jié)彈響就是關(guān)節(jié)在活動時發(fā)出響聲。人們習(xí)慣性地掰手指時發(fā)出清脆的響聲,或者伏案工作后扭...
    王立世閱讀 1,040評論 0 1