Firebase-admin不会写入数据库,不会出现错误
Firebasepipe理员不写入数据库。
我正在实例化数据库:
var db = admin.database();
然后设置一个我想要的表的引用:
var systemsRef = db.ref("systems/");
然后我有一个函数来检查'系统'(一个encryption的硬件ID)是否存在。
function isSystemRegistered(id){ var isTrue; systemsRef.once('value', function(snapshot) { isTrue = (snapshot.hasChild(id))? true : false; }); return isTrue; }
其中,至今仍然是false
; 这是true
,因为它还不存在。 如果系统不存在,则写入数据。
const sysID = getSysID(); var sys.info.name = generateUniqueSystemName(); if(isSystemRegistered(sysID){ console.log("system is already registered!"); } else { msystemsRef.set({ sysID : sys.info.name }, function(error){ console.log('There was an error while attempting to write to database: ' + error); }); }); }
我已经做了实验,并暂时将我的原型数据库公布了几分钟,以确保我的rules
不是问题…他们不是:仍然没有bueno。 没有写入数据库… 没有错误 。
我尝试了不同的set
,只要确保:
msystemsRef.set("I'm writing data", function(error) { if (error) { alert("Data could not be saved." + error); } else { alert("Data saved successfully."); } });
再次,我使用一个pipe理员帐户,与public
规则,所以我应该看到一个现在I'm writing data
表,只是根下面。 没有…
所以我换了一些策略,试图用jar装教程把数据库推到数据库中,我的数据库仍然是公开的:
systemsRef.push({sysID : sys.info.name});
没有什么…我想念我吗?
确保凭据和databaseURL是正确的。
admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: databaseURL });
检查它们是否匹配 – 来自一个应用程序的证书和来自另一个现有应用程序的databaseURL可以产生这样的结果。
如果您不是从文件加载凭证的数据,而是从其他地方加载凭证的数据,请确保它没有被修改 – 将凭证的数据置于shellvariables时,私钥中的换行符有问题。
在isSystemRegistered
您返回undefined
的isTrue
的同步值。
您应该返回.once('value')
方法的承诺,并在调用方法中附加一个then()
来检查它是否存在。
您也可以使用snapshot.exists()
来检查存在的引用。
编辑:
build议编辑:
var systemRef = admin.database('system'); function isSystemRegistered(id) { return systemRef.child(id).once('value') .then(function (snap) { return snap.exists(); }); } function writeData(aSystem) { var sysId = generateUniqueSystemName(); return systemRef.child(sysId) .once('value') .then(function (snapshot) { if (!snapshot.exists()) { return systemRef.child(sysId).update(aSystem); } // Here `sysId === snapshot.key` return systemRef.child(sysId).set(aSystem); }) .catch(function (err) { console.error(err); }); }
在Raspberry Pi上运行引发了更多的问题。
- 它如何连接到互联网?
- 连接速度有多快?
- 你运行什么NodeJS版本?
- 这是否成功地运行在您的电脑上?