我不能使用.push()函数与firebase使用node.js推送数据



我们正在使用nodejs创建一个firebase web应用程序,我们想上传一个带有一堆信息的表单,但唯一要上传的是firebase存储中的图像,但其他数据没有显示在firebase实时数据库中。这是一个按钮的onclick事件监听器内部的代码块,但主要问题是var newPostRef = databaseRef.push();任何形式的帮助或建议将不胜感激。请帮帮我。


var databaseRef = firebase.database().ref().child("Items");
//Upload and save image to firebase storage
databaseRef.once("value").then(function(snapshot){
var name = picture["name"];
var dateStr = new Date().getTime();  
var fileCompleteName = name + "_" + dateStr;
var storageRef = firebase.storage().ref("Items Images");
var itemStorageRef = storageRef.child(fileCompleteName);
var upload = itemStorageRef.put(picture);
upload.on("state_changed",
function error(err){
},
function complete(){
var user = firebase.auth().currentUser;
var userName;
firebase.database().ref('Users/' + user.uid).once('value').then(function(snapshot){
var fName = (snapshot.val() && snapshot.val().firstName);
var lName = (snapshot.val() && snapshot.val().lastName); 
userName = fName + " " + lName;   
});
upload.snapshot.ref.getDownloadURL().then(function(downloadURL){
var time = new Date();
var options = {
weekday: "long",
month: "long",
day: "2-digit",
year: "numeric",
};
var itemData = {
"uid": user.uid,
"name": fileCompleteName, 
"itemName": iname,
"itemCategory": icategory,
"venueLast": ivenue,
"dateLast": idate,
"timeLast": itime,
"itemBrand": ibrand,
"itemColor": icolor,
"itemMaterial": imaterial,
"itemQty": iqty,
"repo": irepo,
"name": userName,
"image": downloadURL,
"time": time.toLocaleString('en-US', {hour: 'numeric', minute: 'numeric', hour12: true}),
"date": time.toLocaleDateString('en-US', options),
};
var newPostRef = databaseRef.push();
newPostRef.set(itemData, function(err){
if(err){
$("#result").attr("class", "alert alert-danger");
$("#result").html(err.message);
}
else{
$("#result").attr("class", "alert alert-success");
$("#result").html("post has been uploaded successfully.");
window.open("", "_self");
}
});
});
}
);
});

您正在编写代码的某些部分,如果它是同步的,但它的大部分是异步的。当您尝试保存数据时,我强烈假设变量userNameundefined

这部分:

firebase
.database()
.ref("Users/" + user.uid)
.once("value")
.then(function (snapshot) {
var fName = snapshot.val() && snapshot.val().firstName;
var lName = snapshot.val() && snapshot.val().lastName;
userName = fName + " " + lName;
});

可能还没写完

upload.snapshot.ref.getDownloadURL().then(function (downloadURL) {
var time = new Date();
var options = {
weekday: "long",
month: "long",
day: "2-digit",
year: "numeric",
};
var itemData = { //.....

尝试重写你的代码,使那些得到执行后,另一个使用async/await。你的代码中有任何错误吗?

最新更新