在我的應用程序中我將這些方法放置在客戶端和服務器之間的共享位置。這種方式正如流星docs中所建議的那樣,方法機制會照顧樂觀的用戶界面。流星,如何用樂觀的UI更新集合
但我剛剛在David Weldon blog中讀過關於雙層實現的內容,這對我來說很有意義。
問題是我怎樣才能實現樂觀的UI與雙層實施。
Move方法服務器,更新clientDB在樂觀的UI模板事件和拒絕來自客戶端的所有更新到數據庫中。
有沒有什麼方法可以在客戶端使用,但只能從另一種方法調用?
任何建議的方法將不勝感激。
在我的應用程序中我將這些方法放置在客戶端和服務器之間的共享位置。這種方式正如流星docs中所建議的那樣,方法機制會照顧樂觀的用戶界面。流星,如何用樂觀的UI更新集合
但我剛剛在David Weldon blog中讀過關於雙層實現的內容,這對我來說很有意義。
問題是我怎樣才能實現樂觀的UI與雙層實施。
Move方法服務器,更新clientDB在樂觀的UI模板事件和拒絕來自客戶端的所有更新到數據庫中。
有沒有什麼方法可以在客戶端使用,但只能從另一種方法調用?
任何建議的方法將不勝感激。
我認爲重要的是拒絕客戶端插入/更新。一旦完成,那麼你可以從客戶端運行第二層代碼,它實際上不會做任何事情,因爲它會被拒絕。
以下是https://www.discovermeteor.com/blog/meteor-pattern-two-tiered-methods/少數幾款支持這一觀點:
客戶&服務器
雖然我說,postSubmit功能主要是預計將在服務器上運行,它會在客戶端上運行在兩種情況下。
首先,從postSubmit方法調用時,作爲該方法的客戶端模擬的一部分。在這種情況下,流星將執行模擬,將帖子插入客戶端數據庫,然後最終觸發服務器端postSubmit方法調用。
另一個用例是有人直接從瀏覽器控制檯調用postSubmit函數。如果發生這種情況,Posts.insert()調用將失敗,因爲我們不允許客戶端插入,並且什麼都不會發生。
請注意,allow/deny不會影響從Meteor方法內執行的代碼,這就是即使您沒有聲明允許/拒絕策略也不會失敗的原因。
所以,換句話說,答案#1:保持方法,常見的位置,並刪除不安全的包(流星刪除不安全)
答到#2:這並不重要,如果他們被稱爲方法之外,因爲他們將被拒絕。
確定Sacha所做的是將寫入DB方法的寫入移動到僅服務器層。客戶端無法訪問該方法並獲得拒絕。在方法中,他檢查一些條件,如果客戶端沒有訪問權限,他們馬上得到錯誤。但它不是樂觀的UI,因爲寫入只發生在服務器端,客戶端必須等待服務器的響應,他試圖通過推遲迴調來加速它,但仍然不樂觀。 – koolaang
你不需要那樣做。 「第二層」功能應保留在共享代碼中,因此客戶端和服務器都可以訪問它。如果客戶通過Meteor.call調用它(即一個方法),然後在流星的模擬下運行第二層功能,插入將發生在客戶端數據上(這就是你所追求的樂觀的用戶界面)。如果服務器運行它並被拒絕,則插入將在客戶機上回滾。如果它在方法調用之外運行(例如通過控制檯),那麼插入將根本不被允許(在運行「meteor remove insecure」之後) –
但這種方式第二層方法可以在沒有第一種方法的情況下從客戶端調用directlt驗證! – koolaang