Firebase .on('值')无效

时间:2016-08-04 17:53:41

标签: javascript firebase firebase-realtime-database

我正在关注此视频here

这是我的代码。

的index.html

<!DOCTYPE html>
<html>
    <head>
        <title>Fire Test</title>
        <script src="https://www.gstatic.com/firebasejs/3.2.1/firebase.js"></script>
    </head>
    <body>

        <!-- Value -->
        <pre id="object"></pre>

        <script src="app.js"></script>
    </body>
</html>

app.js

(function () {

    // Initialize Firebase
    var config = {
        apiKey: "AIzaSyCOJZqfas4gxwEYBbRNyyIy7Z9vEsTx4ME",
        authDomain: "fire-test-e2185.firebaseapp.com",
        databaseURL: "https://fire-test-e2185.firebaseio.com",
        storageBucket: "fire-test-e2185.appspot.com",
    };

    firebase.initializeApp(config);

    var preObject = document.getElementById('object');


    // Create reference 
    var dbRefObject = firebase.database().ref().child('object')

    console.log('test log'); // logging

    // Sync object changes
    dbRefObject.on('value', function (snap) {
        console.log(snap.val()); // not logging
    });

    console.log('test log'); // logging
})();

输出

enter image description here

顺便说一句

这是我测试项目的结构,以防万一。

fire-test
    |_ index.html
    |_ app.js

我在apache

下的/var/www/html/fire-test上运行它

http://localhost/fire-test/

2 个答案:

答案 0 :(得分:6)

实际上firebase的数据库有它的身份验证,我发现我的数据库上的规则没有正确设置(公开)。

我改变了这个:

{
    "rules": {
        ".read": "auth != null",
        ".write": "auth != null"
    }
}

{
    "rules": {
        ".read": true,
        ".write": true
    }
}

"auth != null"true

注意

以这种方式设置规则是一个坏主意。我们不希望任何人访问root节点。虽然在这个答案中,这只是为了测试firebase连接。

答案 1 :(得分:0)

如果您尝试获取包含存储在firebase数据库中该位置的当前值的返回对象,请将.on更改为.once

使用.on表示您希望每次争议事件发生时动态发生某些事情,但.once表示您只是该位置的当前数据。