簡體   English   中英

以下划線開頭的Firebase數據庫密鑰已刪除

[英]Firebase database keys beginning with underscore removed

我開始編寫一個Web應用程序,並且該用戶對象具有_username鍵,因此其開頭是。

如果我將對象添加到Firebase數據庫中,則不存在-其他所有內容都在其中。

為什么這個鍵/值對不在數據庫中? 我的意思是它是有效的JSON,不是嗎?
我的意思是,除了重命名外,還有其他解決方案嗎?

我的被​​推送到數組的對象具有以下結構:

{
    _username:"",
    history:[],
    // ...
}

我的代碼:

var users = $firebaseArray(ref.child("user"));

// adding user
users.$add($scope.session.user);
// logging afterwards - also no '_username'

// logging on init
users.$loaded().then(function (data) {
    $log.debug(data);
});

除下划線變量外,所有內容均已存儲。

看起來像$add() (或更具體地說$firebaseUtils.toJSON() )放置屬性,其名稱以_開頭。 一種快速的查看方法是:

console.log($firebaseUtils.toJSON(user));

一種解決方法是通過JavaScript SDK將用戶對象直接寫入數據庫:

ref.child("user").push(user);

確實會使用有效的鍵名來寫入所有屬性,包括以_開頭的鍵名。

由於AngularFire是基於同一JavaScript SDK構建的,因此它將立即獲取更改。

jsbin中的演示: http ://jsbin.com/lobadej/edit?js,控制台

這是一項設計決定,基於以下事實:聲明私有變量的通用JavaScript約定是在它們前面加上_

關於為什么它與默認SDK行為不同的上下文,請記住AngularFire正在創建可擴展的類實例,並提供客戶端功能(不僅僅是用於數據傳輸的原始JSON對象)。 因此,我們的目標是使擴展和使用$ firebaseArray和$ firebaseObject盡可能簡單明了,並使保存和服務器同步盡可能透明。

為此,您需要一個簡單的約定將“本地”或私有內容與要發送到服務器的內容分開。 由於$在技術上是Angular庫保留的,因此_繼續是在ES6之前為私有變量和方法添加前綴的合適方法。

我們可以重新考慮一下是否有很多人在這里遇到問題,但是考慮到這種方式已經實施了將近3年,並且這是對此的第一條評論,我認為這樣還可以。

另請參閱: https : //github.com/firebase/angularfire/issues/901

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM