- 達成しよう:別のノードから抽出データfirebaseクラウド機能
- プロセスを介し:のonCreateオン/ユーザー/ {UID}、私を与えます私が別の/ users/uidにアクセスするのに使うmanagedby鍵。
- エラー:(エラー1):TypeErrorはnullのプロパティ 'name'を読み取ることができません。 (UPDATE 1):コードに2つの問題がありました。(a)$ {managedby}に$記号を使用せず、もう1つはconst managerValに ".then"を使用していませんでした。 (エラー2):新しいエラーは次のようになります:admin.database.ref(..)。次にexports.sendWelcomeEmailの関数ではありません。私は関数の中でadminを使うべきではないと他の場所で読んでいます。その代わりに何がありますか?エラー3:下記のエラー2のアップデートを見てください。私はそれがこの原因となる小さなものでなければならないと考えています。
名前の値はです。根本的に何か根本的なものがありますか? (クリアUPDATE 1をお読みください。)Firebaseクラウド機能:データへのアクセス別のノードから
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) }) });
ERROR 2:UPDATE:私はファルクの方法@使用している:
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")
私も.then
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:UPDATE 2:私はちょうど.then使用していると、コードはこれです。
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)
これは、ダッシュボードに表示される方法です(下のスクリーンショットに示されています)。どの程度複雑になっていくのか、私は本当に簡単な解決策でなければならないと思う。
こんにちは@faruk ..それがあった更新があった – faruk
JSON構造私達にあなたのユーザーを表示してください仕事は常にあります適切な構文の問題。私は新しい問題を抱えています。 ;) – user165242