如何使用Node.js?
正确设置Firebase的值事件监听器我正在阅读Firebase's documents,,并且已经成功地从我的Mac和我的Raspberry Pi同时运行的Firebase数据库上更新了表格和行,连接到同一Firebase数据库;但是,我无法理解我需要对此段做什么才能在值事件上创建一个监听器:
var starCountRef = firebase.database().ref('posts/' + postId + '/starCount');
starCountRef.on('value', function(snapshot) {
updateStarCount(postElement, snapshot.val());
});
明显对我来说,我需要以某种方式根据输出定义postElement
:
FIREBASE WARNING: Exception was thrown by user callback. ReferenceError: postElement is not defined
但是,我不知道postElement
应该是什么,也不知道如何定义它。救命啊!的
我制作了一个非常小的程序和表来简单地更新/更改值。我改变了程序,当它改变了一行时,我可以看到控制台输出。
这是我的小型用户数据变量,因此您现在尝试更改的数据很少:
var user = {
id:Number,
name:String,
number:Number
};
var users = [user];
这是我对文档代码的更改,因此我可以在Node.js运行时在控制台输出中看到一些内容:
var userRef = firebase.database().ref('/users/user' + users[0].id);
userRef.on('value', function(snapshot){
firebase.app.updateUserInfo(postElement, snapshot.val());
console.log('Users' + users[0].name + ' changed.');//<- this is the line I added.
});
注意:updateStarCount
功能来自Firebase文档中的示例,对于示例有意义,我谨慎地假设更新本地Firebase数据库...
注意2:如果updateStarCount
正在做其他一些魔法,那么它是Firebase的文档漏洞,因为该函数没有在那里定义。任何澄清此文档的帮助将不胜感激。
答案 0 :(得分:6)
为了使这个问题对于同样问题的其他人有帮助,这里有一个扩展的例子来自缺少函数和变量定义的问题:
// some HTML element on the page
var postElement = document.getElementById("postElement");
// here I will assume that this function simply
// updates the contents of the element with a value
var updateStarCount = function(element, value) {
element.textContent = value;
};
var starCountRef = firebase.database().ref('posts/' + postId + '/starCount');
starCountRef.on('value', function(snapshot) {
updateStarCount(postElement, snapshot.val());
});
使用此JavaScript,您可以假设HTML页面如下所示:
<html>
<body>
<div id="postElement"></div>
</body>
</html>
答案 1 :(得分:1)
按照IgorNikolaev的例子......为了使这篇文章对Raspberry Pi上的Node.js有相同问题或者作为独立应用程序(不适用于网页)的人更有用。
感谢@vzsg,Firebase Admin SDK可能更适合我的情况。
创建完整工作示例的步骤是......
这仅包括写入数据库,登录到Firebase控制台时可以看到其结果。
首先,create Firebase admin authentication,然后:
var admin = require("firebase-admin");
admin.initializeApp({
credential:admin.credential.cert("/path/to/credential/cert.json"),
databaseURL: "databaseURLhere"
});
var db = admin.database();
var ref = db.ref("/");
console.log('DB ref: ' + ref);
var usersRef = ref.child("users");
使用set
在数据库中创建新值。 但要小心,set
会覆盖预先存在的值。
usersRef.set({ //With completion callback.
alanisawesome: {
date_of_birth: "June 23, 1912",
full_name: "Alan Turing"
},
gracehop: {
date_of_birth: "December 9, 1906",
full_name: "Grace Hopper"
}
},
function(error) { //NOTE: this completion has a bug, I need to fix.
if (error) {
console.log("Data could not be saved." + error);
} else {
console.log("Data saved successfully.");
}
});
将新列(或更改当前数据)附加到包含update
,的行,但要格外小心以提供列的路径,否则所有以前的列都会被覆盖,而不是追加到表:
usersRef.update({
"alanisawesome/nickname": "Alan The Machine",
"gracehop/nickname": "Amazing Grace"
},
function(error){
if(error){
console.log("Data could not be updated." + error);
} else {
console.log("Data updated successfully.");
}
});