使用节点脚本在给出json文件中列出的网站时自动调用Google的pagespeed api。
{
"1" : "https://bitbucket.org",
"2" : "https://www.catswhocode.com/blog/"
}
目的是将api调用的结果添加到firebase json数据库以及顶级 url 节点,以存储输入的sitestats的firebase密钥。这是我需要的示例firebase数据结构。
sites
-KrehhWxld7XlKCuFSHRY
stats { ... }
url: "https://bitbucket.org"
-KrehhXAWlYdjAOA9sd95
stats { ... }
url: "https://stackoverflow.com"
urls :
393957be871e209a76e0dc5df1f526ec : -KrehhWxld7XlKCuFSHRY
7f4c919540be6ec81cd37d9e61da6c37 : -KrehhXAWlYdjAOA9sd95
在一个承诺中,我正在为firebase json数据库中的节点添加引用。
Promise.all(allRes).then( function( values ) {
var ref = db.ref();
var sitesRef = ref.child("sites");
var urlsRef = ref.child("urls");
var psiresults = {};
SitesArray.map(function (sites, index) {
psiresults[sites] = values[index]
desktopStats = values[index].desktopStats;
mobileStats = values[index].mobileStats;
sitesRef.push({
url: sites,
stats: metricsResponse
});
sitesRef.once('child_added', function(snapshot) {
console.log(snapshot.key) //returns the last key only
});
});
使用once('child_added', ...
时,它仅为最后一项添加到网址顶级节点。但是,如果on('child_added', ...
添加了相同数据和其他子项的多个副本。每次将子项添加到站点节点时,不确定如何将确切的子键添加到 urls 顶级节点。
答案 0 :(得分:1)
如果您要处理所有网址一次,请将once('value'
与snapshot.forEach()
:
sitesRef.once('value', function(snapshot) {
snapshot.forEach(function(child) {
console.log(child.key);
});
});
答案 1 :(得分:0)
最后,我必须使用..
sitesRef.on('value', function(snapshot) {
...
});
这将返回所有子项,然后我可以根据SitesArray值过滤结果。我并不是真的觉得这是一个合适的解决方案,但是,我能够让它发挥作用。