在不下载父节点的情况下检查 Firebase 数据库的密钥?
Checking Firebase database for a key without downloading parent node?
我有一个结构如下的 Firebase 实时数据库:
referrals
Test1: 0
Test2: 0
我正在尝试检查数据库中是否存在“referral_code”,这是我正在使用的代码:
exports.validateReferral = functions.https.onCall((data, context) => {
const referral_code = data.ref
console.log("Cloud verifying referral code, code is " + referral_code)
admin.database().ref().child("referrals").once("value", snapshot => {
if (snapshot.hasChild(referral_code)) {
console.log("referral code is valid");
return true
} else {
console.log("referral code is not valid");
return false
}
})
})
当我 运行 它时,它显示“云验证推荐代码,代码是 Test1”,但它也 returns 无效,尽管密钥在数据库中。
知道如何调试吗?我尝试记录“快照”的值,但 Firebase 快照内容的 none 显示实际值。谁能帮我看看怎么定位问题?
您在代码的顶层缺少 return
:
//
return admin.database().ref().child("referrals").once("value").then((snapshot) => {
if (snapshot.hasChild(referral_code)) {
console.log("referral code is valid");
return true
} else {
console.log("referral code is not valid");
return false
}
})
如果没有顶级 return,来自异步回调的 return 值永远不会到达您的客户端,并且(更糟的是)代码可能在从数据库中读取结果之前就终止了.
但我还建议更改代码,不要下载整个 referrals
节点,只是为了检查一个键是否存在。这完成相同并且只下载(最多)一个子节点:
//
return admin.database().ref().child("referrals").child(referral_code).once("value").then((snapshot) => {
//
if (snapshot.exists()) {
console.log("referral code is valid");
return true
} else {
console.log("referral code is not valid");
return false
}
})
我有一个结构如下的 Firebase 实时数据库:
referrals
Test1: 0
Test2: 0
我正在尝试检查数据库中是否存在“referral_code”,这是我正在使用的代码:
exports.validateReferral = functions.https.onCall((data, context) => {
const referral_code = data.ref
console.log("Cloud verifying referral code, code is " + referral_code)
admin.database().ref().child("referrals").once("value", snapshot => {
if (snapshot.hasChild(referral_code)) {
console.log("referral code is valid");
return true
} else {
console.log("referral code is not valid");
return false
}
})
})
当我 运行 它时,它显示“云验证推荐代码,代码是 Test1”,但它也 returns 无效,尽管密钥在数据库中。
知道如何调试吗?我尝试记录“快照”的值,但 Firebase 快照内容的 none 显示实际值。谁能帮我看看怎么定位问题?
您在代码的顶层缺少 return
:
//
return admin.database().ref().child("referrals").once("value").then((snapshot) => {
if (snapshot.hasChild(referral_code)) {
console.log("referral code is valid");
return true
} else {
console.log("referral code is not valid");
return false
}
})
如果没有顶级 return,来自异步回调的 return 值永远不会到达您的客户端,并且(更糟的是)代码可能在从数据库中读取结果之前就终止了.
但我还建议更改代码,不要下载整个 referrals
节点,只是为了检查一个键是否存在。这完成相同并且只下载(最多)一个子节点:
//
return admin.database().ref().child("referrals").child(referral_code).once("value").then((snapshot) => {
//
if (snapshot.exists()) {
console.log("referral code is valid");
return true
} else {
console.log("referral code is not valid");
return false
}
})