节点js中的Firebase Admin SDK更新或设置导致无限回调
Update or Set in Firebase Admin SDK in node js causes infinite callbacks
我正在从 Firebase 数据库的节点获取数据,然后在进行一些计算后更新它。
我在节点 js 中使用 Firebase SDK 来执行此任务。
代码如下:
app.get("/setBookedSpots", function (request, response) {
console.log("booked spots called");
var verifierEmail = request.query.verifierEmail;
var toBeBookedSpot = request.query.bookSpot;
console.log(toBeBookedSpot);
admin.auth().getUserByEmail(verifierEmail)
.then(function (userRecord) {
console.log("Successfully fetched user data:", userRecord.toJSON());
var verifierId = userRecord.uid;
var refToUserInformation = db.ref("user/" + verifierId);
refToUserInformation.child("Society_Name").on("value", function (snapshot) {
console.log(snapshot.val());
var SocietyName = snapshot.val();
refToSocietyBookingStatus = db.ref("Societies/" + SocietyName + "/Society_Parking_Details/Society_Parking_Status");
refToSocietyBookingStatus.child("Booked_Spots").on("value", function (snapshot) {
var Booked_Spots = snapshot.val();
console.log(Booked_Spots);
console.log("to be booked spot", toBeBookedSpot);
Booked_Spots = Booked_Spots.toString() + "," + toBeBookedSpot;
console.log("after booked spot", Booked_Spots);
refToSocietyBookingStatus.update({
"Booked_Spots": Booked_Spots
})
response.send({ "msg": "success" });
})
})
});
});
我正在获取预订的地点并根据请求参数更新它们。
当我击中它时,它会无限回调。我的意思是它继续递归追加,因为没有循环导致它崩溃。
我尝试为数据库引用使用不同的变量,这样它可能不会再次调用父事件,但仍然是同样的问题。
这是服务调用 url:
http://localhost:8080/setBookedSpots?verifierEmail=kemarikun@gmail.com&bookSpot=A7
您可以使用而不是 response.send({ "msg": "success" });
来更改此 response.send(JSON.stringify({ msg: 'success'}));
在尝试了很多之后,我开始知道 on("value")
事件正在执行,因为我正在更新我刚刚从中检索值的同一个节点,因此进入递归并继续调用关于更新。
解决方法如下:将 on("value")
替换为 once("value")
让它只执行一次。
我正在从 Firebase 数据库的节点获取数据,然后在进行一些计算后更新它。
我在节点 js 中使用 Firebase SDK 来执行此任务。
代码如下:
app.get("/setBookedSpots", function (request, response) {
console.log("booked spots called");
var verifierEmail = request.query.verifierEmail;
var toBeBookedSpot = request.query.bookSpot;
console.log(toBeBookedSpot);
admin.auth().getUserByEmail(verifierEmail)
.then(function (userRecord) {
console.log("Successfully fetched user data:", userRecord.toJSON());
var verifierId = userRecord.uid;
var refToUserInformation = db.ref("user/" + verifierId);
refToUserInformation.child("Society_Name").on("value", function (snapshot) {
console.log(snapshot.val());
var SocietyName = snapshot.val();
refToSocietyBookingStatus = db.ref("Societies/" + SocietyName + "/Society_Parking_Details/Society_Parking_Status");
refToSocietyBookingStatus.child("Booked_Spots").on("value", function (snapshot) {
var Booked_Spots = snapshot.val();
console.log(Booked_Spots);
console.log("to be booked spot", toBeBookedSpot);
Booked_Spots = Booked_Spots.toString() + "," + toBeBookedSpot;
console.log("after booked spot", Booked_Spots);
refToSocietyBookingStatus.update({
"Booked_Spots": Booked_Spots
})
response.send({ "msg": "success" });
})
})
});
});
我正在获取预订的地点并根据请求参数更新它们。
当我击中它时,它会无限回调。我的意思是它继续递归追加,因为没有循环导致它崩溃。
我尝试为数据库引用使用不同的变量,这样它可能不会再次调用父事件,但仍然是同样的问题。
这是服务调用 url:
http://localhost:8080/setBookedSpots?verifierEmail=kemarikun@gmail.com&bookSpot=A7
您可以使用而不是 response.send({ "msg": "success" });
来更改此 response.send(JSON.stringify({ msg: 'success'}));
在尝试了很多之后,我开始知道 on("value")
事件正在执行,因为我正在更新我刚刚从中检索值的同一个节点,因此进入递归并继续调用关于更新。
解决方法如下:将 on("value")
替换为 once("value")
让它只执行一次。