Firebase on(child_added) 某些字段 'undefined'

Firebase on(child_added) some field 'undefined'

我正在开发一个实时应用程序,我正在使用纯 html 和 javascript(不是 angularJS)的 firebase。

我在使用 firebase 的给定代码将用户数据保存到 firebase 时遇到问题:

var isNewUser = true;
ref.onAuth(function(authData) {
  if (authData && isNewUser) {
    authData['status'] = 'active';
    authData['role'] = 'member';
    ref.child("users").child(authData.uid).set(authData);
   }
});

这会将 authData 添加到 /users/ 节点。如您所见,我还在 authData、status 和 role 中附加了一些自定义字段。

现在我正在使用这段代码从 firebase 获取用户数据并显示它们。

ref4.on("value", function(snapshot) {
    var snapshotData = snapshot.val();
console.log('username: '+snapshotData.status);
});

如果我使用 on('value'),状态会打印在控制台上,但如果我这样做,

ref4.on("child_added", function(snapshot) {
  var snapshotData = snapshot.val();
  console.log('status: '+snapshotData.status);
});

状态显示未定义。我可以知道出了什么问题以及如何解决这个问题。谢谢。

由于 value 正在返回 ref4 提供的路径,而 child_added 正在返回该路径的每个子路径,因此不太可能两者都具有关键状态。

考虑这个数据结构:

{
   "users": {
      "brucelee": {
          "status": "awesome"
      },
      "chucknorris": {
          "status": "awesomerest"
      }
   }
}

如果我现在根据你不完整的例子查询这个:

var ref = new Firebase('https://<instance>firebaseio.com/users/brucelee');
ref.on('value', function(snap) {
   // requests the brucelee record
   console.log(snap.name(), ':', snap.val().status); // "brucelee: awesome"
});

ref.on('child_added', function(snap) {
   // iterates children of the brucelee path (i.e. status)
   console.log(snap.name(), ':', snap.val().status); // THROWS AN ERROR, because status is a string
});

所以要在 child_added 上使用这样的数据结构(大概有点像你的)执行此操作,它看起来如下:

ref.on('child_added', function(snap) {
   // iterates children of the brucelee path (i.e. status)
   console.log(snap.name(), ':', snap.val()); // "status: awesome"
});