Javascript Firebase错误:未捕获类型错误:ref.once不是函数
我正在尝试使用firebase上载文件,同时在我的数据库中输入文件。(我想记录有多少次上传,以便我可以将文件重命名为唯一的文件)我成功上传,并在数据库中放置了一个副本,但我无法使用once()和getChildren()方法获取子文件夹中有多少文件的数字。我总是出错。我做错了什么?计数编号错误来自此处:Javascript Firebase错误:未捕获类型错误:ref.once不是函数,javascript,html,angularjs,firebase,firebase-realtime-database,Javascript,Html,Angularjs,Firebase,Firebase Realtime Database,我正在尝试使用firebase上载文件,同时在我的数据库中输入文件。(我想记录有多少次上传,以便我可以将文件重命名为唯一的文件)我成功上传,并在数据库中放置了一个副本,但我无法使用once()和getChildren()方法获取子文件夹中有多少文件的数字。我总是出错。我做错了什么?计数编号错误来自此处: var ref = firebase.database(); ref.once("value")
var ref = firebase.database();
ref.once("value")
.then(function(snapshot) {
var numberSamples = snapshot.child(sampleType).numChildren(); //number of children
});
<script src="https://www.gstatic.com/firebasejs/3.3.2/firebase.js"></script>
<script>
// Initialize Firebase
var config = {
apiKey: "AIzaSyC9jUMxOvvdgcBvXecvpRiactG6ffbwTgg",
authDomain: "instasample-d8eea.firebaseapp.com",
databaseURL: "https://instasample-d8eea.firebaseio.com",
storageBucket: "instasample-d8eea.appspot.com",
};
firebase.initializeApp(config);
//remove error on click
function removeSampleClass() {
$("#sampleType").removeClass('sampleTypeError')
$("#sampleType").addClass('sampleType')
}
function removeFileClass() {
$("#fileButton").removeClass('fileButtonError')
$("#fileButton").addClass('fileButton')
}
// upload files and check for errors
function uploadFile(){ //on GO
//get elements
var uploader = document.getElementById('uploader')
var fileButton = document.getElementById('fileButton')
//var file = fileButton.target.files[0]; //get file
var sampleType = document.getElementById('sampleType').options[document.getElementById('sampleType').selectedIndex].text; //get folder location
var file = fileButton.files[0]; //get file
if (sampleType == "Select Type" && fileButton.value == "") { //check both selection
$("#sampleType").addClass('sampleTypeError')
$("#sampleType").removeClass('sampleType')
$("#fileButton").addClass('fileButtonError')
$("#fileButton").removeClass('fileButton')
}
else if (fileButton.value == "") { //check file selection
$("#fileButton").addClass('fileButtonError')
$("#fileButton").removeClass('fileButton')
}
else if (sampleType == "Select Type") { //check sample selection
$("#sampleType").addClass('sampleTypeError')
$("#sampleType").removeClass('sampleType')
}
else{ //upload if good
uploader.classList.remove('hide'); //unhide progress bar
//create storage reference with sampleType
var storageRef = firebase.storage().ref("/" + sampleType + "/" + file.name);
//upload file
var task = storageRef.put(file);
//update progress bar
task.on('state_changed',
function progress(snapshot){
var percentage = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
uploader.value = percentage;
},
function error() {
alert('There was a problem uploading your file')
},
function complete() {
//get root reference
const dbRefType = firebase.database().ref().child(sampleType);
var ref = firebase.database();
ref.once("value")
.then(function(snapshot) {
var numberSamples = snapshot.child(sampleType).numChildren(); // 2 ("first", "last")
});
var updates = {};
updates["/" + sampleType + "/" + sampleType + "Sample" + numberSamples ] = numberSamples;
return firebase.database().ref().update(updates);
//sync data and return children of sampleType to console
//dbRefType.on('value', snap => console.log(snap.val()));
//create new reference to file
//var sampleFileRef = dbRefType.child("sample");
//TODO: list how many are in list
//add new file to list
}
);
}
}
</script>
完整代码:
var ref = firebase.database();
ref.once("value")
.then(function(snapshot) {
var numberSamples = snapshot.child(sampleType).numChildren(); //number of children
});
<script src="https://www.gstatic.com/firebasejs/3.3.2/firebase.js"></script>
<script>
// Initialize Firebase
var config = {
apiKey: "AIzaSyC9jUMxOvvdgcBvXecvpRiactG6ffbwTgg",
authDomain: "instasample-d8eea.firebaseapp.com",
databaseURL: "https://instasample-d8eea.firebaseio.com",
storageBucket: "instasample-d8eea.appspot.com",
};
firebase.initializeApp(config);
//remove error on click
function removeSampleClass() {
$("#sampleType").removeClass('sampleTypeError')
$("#sampleType").addClass('sampleType')
}
function removeFileClass() {
$("#fileButton").removeClass('fileButtonError')
$("#fileButton").addClass('fileButton')
}
// upload files and check for errors
function uploadFile(){ //on GO
//get elements
var uploader = document.getElementById('uploader')
var fileButton = document.getElementById('fileButton')
//var file = fileButton.target.files[0]; //get file
var sampleType = document.getElementById('sampleType').options[document.getElementById('sampleType').selectedIndex].text; //get folder location
var file = fileButton.files[0]; //get file
if (sampleType == "Select Type" && fileButton.value == "") { //check both selection
$("#sampleType").addClass('sampleTypeError')
$("#sampleType").removeClass('sampleType')
$("#fileButton").addClass('fileButtonError')
$("#fileButton").removeClass('fileButton')
}
else if (fileButton.value == "") { //check file selection
$("#fileButton").addClass('fileButtonError')
$("#fileButton").removeClass('fileButton')
}
else if (sampleType == "Select Type") { //check sample selection
$("#sampleType").addClass('sampleTypeError')
$("#sampleType").removeClass('sampleType')
}
else{ //upload if good
uploader.classList.remove('hide'); //unhide progress bar
//create storage reference with sampleType
var storageRef = firebase.storage().ref("/" + sampleType + "/" + file.name);
//upload file
var task = storageRef.put(file);
//update progress bar
task.on('state_changed',
function progress(snapshot){
var percentage = (snapshot.bytesTransferred / snapshot.totalBytes) * 100;
uploader.value = percentage;
},
function error() {
alert('There was a problem uploading your file')
},
function complete() {
//get root reference
const dbRefType = firebase.database().ref().child(sampleType);
var ref = firebase.database();
ref.once("value")
.then(function(snapshot) {
var numberSamples = snapshot.child(sampleType).numChildren(); // 2 ("first", "last")
});
var updates = {};
updates["/" + sampleType + "/" + sampleType + "Sample" + numberSamples ] = numberSamples;
return firebase.database().ref().update(updates);
//sync data and return children of sampleType to console
//dbRefType.on('value', snap => console.log(snap.val()));
//create new reference to file
//var sampleFileRef = dbRefType.child("sample");
//TODO: list how many are in list
//add new file to list
}
);
}
}
</script>
//初始化Firebase
变量配置={
apiKey:“AIzaSyC9jUMxOvvdgcBvXecvpRiactG6ffbwTgg”,
authDomain:“instasample-d8eea.firebaseapp.com”,
数据库URL:“https://instasample-d8eea.firebaseio.com",
storageBucket:“instasample-d8eea.appspot.com”,
};
firebase.initializeApp(配置);
//单击时删除错误
函数removeSampleClass(){
$(“#sampleType”).removeClass('sampleTypeError'))
$(“#sampleType”).addClass('sampleType'))
}
函数removeFileClass(){
$(“#fileButton”).removeClass('fileButtonError')
$(“#fileButton”).addClass('fileButton'))
}
//上传文件并检查错误
函数uploadFile(){//on GO
//获取元素
var uploader=document.getElementById('uploader')
var fileButton=document.getElementById('fileButton'))
//var file=fileButton.target.files[0];//获取文件
var sampleType=document.getElementById('sampleType')。选项[document.getElementById('sampleType')。selectedIndex]。text;//获取文件夹位置
var file=fileButton.files[0];//获取文件
如果(sampleType==“选择类型”&&fileButton.value==”){//检查两个选择
$(“#sampleType”).addClass('sampleTypeError')
$(“#sampleType”).removeClass('sampleType'))
$(“#fileButton”).addClass('fileButtonError')
$(“#fileButton”).removeClass('fileButton'))
}
else if(fileButton.value==“”){//检查文件选择
$(“#fileButton”).addClass('fileButtonError')
$(“#fileButton”).removeClass('fileButton'))
}
else if(sampleType==“选择类型”){//检查样本选择
$(“#sampleType”).addClass('sampleTypeError')
$(“#sampleType”).removeClass('sampleType'))
}
否则{//如果好的话上传
uploader.classList.remove('hide');//取消隐藏进度条
//使用sampleType创建存储引用
var storageRef=firebase.storage().ref(“/”+sampleType+“/”+file.name);
//上传文件
var task=storageRef.put(文件);
//更新进度条
task.on('state_changed',
功能进度(快照){
变量百分比=(snapshot.bytesttransfered/snapshot.totalBytes)*100;
uploader.value=百分比;
},
函数错误(){
警报('上载文件时出现问题')
},
函数完成(){
//获取根引用
const dbRefType=firebase.database().ref().child(sampleType);
var ref=firebase.database();
参考一次(“价值”)
.then(功能(快照){
var numberSamples=snapshot.child(sampleType.numChildren();//2(“第一个”、“最后一个”)
});
var更新={};
更新[“/”+sampleType+“/”+sampleType+“Sample”+numberSamples]=numberSamples;
返回firebase.database().ref().update(更新);
//同步数据并将sampleType的子级返回控制台
//dbRefType.on('value',snap=>console.log(snap.val());
//创建对文件的新引用
//var sampleFileRef=dbRefType.child(“示例”);
//TODO:列出列表中有多少个
//将新文件添加到列表中
}
);
}
}
没关系,我明白了。使用
dbRefType.once('value', function(snapshot) { alert('Count: ' + snapshot.numChildren()); });