2016-02-12 41 views
25

我是parse.com用戶,現在我正在尋找其他服務。 如何將結束邏輯寫回Firebase?Firebase和後端邏輯

讓我說我想驗證服務器端的所有值,或觸發事情。我想過一種解決方案,但我想知道推薦的方法。

我認爲

  1. 創建服務器的NodeJS,使用快遞。
  2. 創建中間件來處理邏輯。
  3. 從應用發送休息請求,觸發中間件
  4. 使用firebase的nodejs sdk根據http請求的參數更新值。
  5. 並就聽聽變化

enter image description here

他們簡單的東西應用火力處理函數中實現?在解析我使用雲代碼時,我希望邏輯將不在客戶端,而在服務器端。

+1

好問題!正如您可能已經看到的,Firebase沒有與Cloud Code(尚未)的直接對應關係。我已經在下面描述/鏈接了一些方法。只是評論,如果有什麼不明確的! –

+0

[你有沒有看過Rob Dodson的視頻,解釋如何使用Firebase和Polymer](https://youtu.be/1f_Tj_JnStA?t=12m52s)?我認爲這是一個非常強大的組合。 https://youtu.be/1f_Tj_JnStA?t=12m52s – Mowzer

回答

39

更新(2017年3月10日)雖然我下面概述架構仍然有效,可用於火力地堡與任何現有的基礎設施,火力​​地堡剛剛發佈Cloud Functions for Firebase,它允許你在運行JavaScript的功能相結合谷歌的響應Firebase事件的服務器(例如數據庫更改,用戶登錄等)。


的火力地堡應用的通用架構是相當在這篇博客Where does Firebase fit in your app?明確。

您建議的架構最接近架構3,您的客戶端代碼直接與Firebase 直接對話,直接與您的node.js服務器通信。

我強烈建議您考慮選項2,其中客戶端和服務器之間的所有交互都通過Firebase運行。這種類型的體系結構的一個很好的例子是Flashlight search integration。客戶將其搜索查詢寫入Firebase數據庫。服務器監聽這些請求,執行查詢並將響應寫回數據庫。客戶端等待該響應。

此服務器的簡單輪廓依稀可辨:

var ref = new Firebase('https://yours.firebaseio.com/searches'); 
ref.child('requests').on('child_added', function(requestSnapshot) { 

    // TODO: execute your operation for the request 

    var responseRef = ref.child('responses').child(requestSnapshot.key()); 
    responseRef.set(result, function(error) { 
     if (!error) { 
      // remove the request, since we've handled it 
      requestSnapshot.ref().remove(); 
     } 
    }); 
}) 

利用這最後的辦法,客戶端從不直接會談到你的服務器,刪除所有樣的,你不必擔心潛在的問題。出於這個原因,我有時將它們稱爲「機器人」,而不是服務器。

+1

這是一個隊列系統。所以客戶端可以隨心所欲(好吧:無論你的[安全+驗證規則](https://www.firebase.com/docs/security/guide/)允許)作爲請求,但是你的機器人/服務器決定了什麼用它做什麼和給予什麼迴應(如果有的話)。它可以忽略它認爲「無效」的請求,並讓流氓客戶端等待響應。您還可以在請求/響應協議中構建錯誤處理,併發送「NOPE」類型的響應。它就像一個API,除了你使用我們的數據庫來公開它。 –

+0

所以在這種情況下,我需要服務器。這不是更好的使用socket.io? 在我看來,像刪除一層,更簡單。 – Alon

+1

如果你喜歡做中間件,有很多替代品。什麼是「更好」是主觀的。我只想詳細說明如何在Firebase上構建API,而不使用中間件。這是目前Firebase最常用的雲代碼替代方案。 –

2

這裏是我會做:

  • Validade所有與".validate" rules投入。沒有服務器需要的。
  • 如果您有要運行的任務,請使用Firebase Queue,一個機器人運行任務並完成。

如果你不這樣做的最後一個,你可能有兩個問題:

  • 如果您嘗試使用您發佈的示意圖這將是一個有點棘手得到auth對象的服務器(但不是不可能)。如果您不需要驗證用戶以允許請求,請繼續。

  • 如果您只使用常規的Firebase應用程序來偵聽更改並作出響應(例如編輯對象,如Frank van Puffelen的示例代碼),則可能存在可伸縮性問題。一旦您的後端擴展到兩個(或更多)實例,Firebase編輯將觸發全部任務。每個實例會發現有一個變化,然後運行同一任務每一次,添加/替換響應對象每一次和嘗試刪除每一次請求對象..

使用火力地堡隊列避免了這兩種問題。

4

2017年

今天,谷歌宣佈雲功能的火力地堡 https://firebase.google.com/features/functions/

這是在火力地堡的架構和後端邏輯很好的解決方案。

+0

我已經知道這一點,現在它已經解決了我的問題我只是在一個月前面對,謝謝firebase團隊! –

+0

我來到這個StackOverflow的問題,因爲我無法使用唯一的Firebase過濾我的電子商務網站。我如何才能做到這一點。如果我使用一些REST API你可以指導我應該怎麼做 – George

+0

@George你可以使用新的firebase雲存儲。但是,仍然無法進行全文搜索。我想你可能想要使用外部搜索引擎(如algolia)在您的網站中啓用高級搜索功能。 –