已删除下划线的Firebase数据库密钥

时间:2017-01-13 15:53:49

标签: javascript angularjs firebase-realtime-database angularfire

我开始编写一个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);
});

除了下划线var ...

之外,所有内容都已存储

2 个答案:

答案 0 :(得分:3)

看起来像$add()(或更具体地说是$firebaseUtils.toJSON())drop属性,其名称以_开头。快速查看此信息的方法是:

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

解决方法是通过JavaScript SDK直接将用户对象写入数据库:

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

使用有效的键名写入所有属性,包括前缀为_的属性。

由于AngularFire构建于同一JavaScript SDK之上,因此它会立即获取更改。

jsbin演示:http://jsbin.com/lobadej/edit?js,console

答案 1 :(得分:2)

这是一个设计决策,基于这样一个事实,即声明私有变量的常见JavaScript约定是用_作为前缀。

有关为什么它与默认SDK行为不同的上下文,请记住AngularFire正在创建可以扩展的类实例,并提供客户端功能(不仅仅是用于数据传输的原始JSON对象)。因此,我们的目标是尽可能简单明了地扩展和使用$ firebaseArray和$ firebaseObject,并使保存和服务器同步尽可能透明。

为此,您需要一个简单的约定来将“本地”或私有内容与您要发送到服务器的内容分开。由于$在技术上由Angular库保留,_仍然是在ES6之前为私有变量和方法添加前缀的适当方法。

如果有很多人在这里遇到问题,我们可以重新考虑,但鉴于它已经用这种方式实施了将近3年,这是对它的第一次评论,我怀疑它很好。

另请参阅:https://github.com/firebase/angularfire/issues/901