- 訪問數據試圖實現:從經由火力雲功能 一個單獨的節點提取數據
- 過程:的onCreate上/用戶/ {UID},這使我一個managedby密鑰,使用它我訪問另一個/ users/uid。
- 錯誤:(錯誤1):TypeError無法讀取null的屬性'name'。 (更新1):代碼有兩個問題(a)我沒有在$ {managedby}中使用$符號,而第二個在const managerVal中沒有使用「.then」。 (錯誤2):拋出的新錯誤是:admin.database.ref(..)。然後不是一個函數在exports.sendWelcomeEmail ...我讀過其他地方,我們不應該使用admin之間的函數。什麼是替代呢?錯誤3:請看下面的錯誤2更新。我認爲這一定是小事情造成的。
名稱的值爲。這裏有什麼根本性的錯誤嗎? (清除讀取,更新,1)火力地堡雲功能:從不同的節點
admin.initializeApp(functions.config().firebase); // // Create and Deploy Your First Cloud Functions // // https://firebase.google.com/docs/functions/write-firebase-functions // // exports.helloWorld = functions.https.onRequest((request, response) => { // response.send("Hello from Firebase!"); // }); exports.sendWelcomeEmail = functions.database.ref('/users/{uid}').onWrite(event => { if (!event.data.exists() || event.data.previous.exists()) { return; } var user = event.data.val() var {email} = user var {managedby} = user const managerVal = admin.database().ref(`/users/{managedby}`).on('value', function(snapshot){ const managedByName = snapshot.val().name const managedByMobile = snapshot.val().mobile }); console.log(email) var data = { from: '[email protected]', subject: 'From Your Admin! Please set your Password for your account', html: `<p> hello</p>`, to: email } mailgun.messages().send(data, function (error, body) { console.log(body) }) });
錯誤2:更新:我已經使用@法魯克的方法:
var user = event.data.val();
var email = user.email;
var managedby = user.managedby;
const managerVal = db.ref('/users/' + managedby).on('value', function(snapshot){
console.log("inside the function")
const managerUser = snapshot.val();
if(managerUser)
{
const managedByName = managerUser.name;
const managedByMobile = managerUser.mobile;
}
});
console.log("outside the function")
我也曾嘗試使用。於是
var user = event.data.val();
var email = user.email;
var managedby = user.managedby;
const managerVal = db.ref('/users/' + managedby).once('value')
.then((snapshot) => {
console.log("inside the function")
const managerUser = snapshot.val();
if(managerUser)
{
const managedByName = managerUser.name;
const managedByMobile = managerUser.mobile;
}
});
console.log("outside the function")
現在的問題是,「功能外」部分先被觸發,然後「功能內」部分被觸發。在它離開之前,它是否在第一個完成的功能中執行?我不知道問題在哪裏。
編輯:法魯克,我已經把(複製粘貼)你有節目數據庫調用內的整個郵件功能。一些非常基本的東西正在被遺漏。仍然得到這個錯誤:
錯誤2:更新2:我剛使用。那麼,代碼是這樣的。
var db = admin.database();
if (!event.data.exists() || event.data.previous.exists()) {
return;
}
var user = event.data.val();
var email = user.email;
var managedby = user.managedby;
console.log(managedby)
const managerVal = db.ref('/users/' + managedby).once('value')
managerVal.then((snapshot) => {
const managerUser = snapshot.val()
console.log("inside snapshot")
if (managerUser) {
console.log("deep inside snapshot")
const managedByName = managerUser.name
const managedByMobile = managerUser.mobile
}
})
console.log("outside snapshot")
console.log('managerName = ' + managedByName)
console.log('email = ' + email)
這就是它在儀表板中的特色(在下面的屏幕截圖中給出)。通過它的複雜程度,我認爲它必定是一個真正簡單的解決方案。
,請告訴我們您的用戶JSON結構 – faruk
喜@faruk出現了更新。它是一個問題與正確的語法。但我有一個新問題。 ;) – user165242