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您返回undefinedisTrue的同步值。

您应该返回.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版本?
  • 这是否成功地运行在您的电脑上?