Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase云功能:从不同节点访问数据 尝试实现:通过firebase云函数从单独的节点提取数据 进程:onCreate on/users/{uid},这给了我一个managedby键,我使用它访问另一个/users/uid 错误:(错误1):TypeError无法读取null的属性“name”。(更新1):代码有两个问题(a)我没有为${managedby}使用$符号,第二个没有在const managerVal中使用“.then”。(错误2):引发的新错误是:admin.database.ref(..)。然后不是exports.sendWelcomeEmail的函数。。。我在别处读到,我们不应该在函数之间使用admin。那么,还有什么选择呢?错误3:查看下面的错误2更新。我想一定是小东西引起了这一切_Firebase_Firebase Cloud Messaging_Google Cloud Functions - Fatal编程技术网

Firebase云功能:从不同节点访问数据 尝试实现:通过firebase云函数从单独的节点提取数据 进程:onCreate on/users/{uid},这给了我一个managedby键,我使用它访问另一个/users/uid 错误:(错误1):TypeError无法读取null的属性“name”。(更新1):代码有两个问题(a)我没有为${managedby}使用$符号,第二个没有在const managerVal中使用“.then”。(错误2):引发的新错误是:admin.database.ref(..)。然后不是exports.sendWelcomeEmail的函数。。。我在别处读到,我们不应该在函数之间使用admin。那么,还有什么选择呢?错误3:查看下面的错误2更新。我想一定是小东西引起了这一切

Firebase云功能:从不同节点访问数据 尝试实现:通过firebase云函数从单独的节点提取数据 进程:onCreate on/users/{uid},这给了我一个managedby键,我使用它访问另一个/users/uid 错误:(错误1):TypeError无法读取null的属性“name”。(更新1):代码有两个问题(a)我没有为${managedby}使用$符号,第二个没有在const managerVal中使用“.then”。(错误2):引发的新错误是:admin.database.ref(..)。然后不是exports.sendWelcomeEmail的函数。。。我在别处读到,我们不应该在函数之间使用admin。那么,还有什么选择呢?错误3:查看下面的错误2更新。我想一定是小东西引起了这一切,firebase,firebase-cloud-messaging,google-cloud-functions,Firebase,Firebase Cloud Messaging,Google Cloud Functions,名称有一个值。这里有什么根本的问题吗?(已清除。读取更新1) 我也试过用。然后呢 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 func

名称有一个值。这里有什么根本的问题吗?(已清除。读取更新1)

我也试过用。然后呢

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")
现在的问题是,先触发“函数外部”部分,然后触发“函数内部”部分。函数中的执行不是在它离开之前首先完成的吗?我不知道问题出在哪里

编辑:Faruk,我已经在数据库调用中放置(复制粘贴)了整个mailer函数,如您所示。一些非常基本的东西被遗漏了。仍然会出现此错误:

错误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)
这就是它在仪表板中的特性(在下面的屏幕截图中给出)。考虑到它变得多么复杂,我认为它一定是一个真正简单的解决方案


可能是这样的:

const admin = require('firebase-admin');
var serviceAccount = require("./serviceAccountKey.json");

//just called once
admin.initializeApp({
   credential: admin.credential.cert(serviceAccount),
   databaseURL: "https://[your_project_id].firebaseio.com"
});

exports.sendWelcomeEmail = functions.database.ref('/users/{uid}').onCreate(event => {
    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;
    const managerVal = db.ref('/users/' + managedby).on('value', function(snapshot){
            const managerUser = snapshot.val();
            var managedByName;
            var managedByMobile;
            if(managerUser)
            {
              managedByName = managerUser.name;
              managedByMobile = managerUser.mobile;
            }
            console.log('managerName = ' + managedByName);
            console.log('email = ' + email);

            var data = {
               from: 'no-reply@firebaseapp.com',
               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)
            })

    });


});
const admin=require('firebase-admin');
var servicecomport=require(“./servicecomportkey.json”);
//刚打过一次电话
admin.initializeApp({
凭证:管理员凭证证书(serviceAccount),
databaseURL:“https://[your_project_id].firebaseio.com”
});
exports.sendWelcomeEmail=functions.database.ref('/users/{uid}').onCreate(事件=>{
var db=admin.database();
如果(!event.data.exists()| | event.data.previous.exists()){
返回;
}
var user=event.data.val();
var email=user.email;
var managedby=user.managedby;
const managerVal=db.ref('/users/'+managedby).on('value',函数(快照){
const managerUser=snapshot.val();
var-managedByName;
var-managedByMobile;
if(managerUser)
{
managedByName=managerUser.name;
managedByMobile=managerUser.mobile;
}
log('managerName='+managedByName);
console.log('email='+email);
风险值数据={
发信人:“没有-reply@firebaseapp.com',
主题:“来自您的管理员!请为您的帐户设置密码”,
html:`你好

`, 收件人:电子邮件 } mailgun.messages().send(数据、函数(错误、正文){ 控制台日志(正文) }) }); });

在值上
始终异步工作

请向我们显示您的用户json structureHi@faruk有一个更新。。这是正确语法的问题。不过我有一个新问题是否有管理数据库模块?我现在会检查这个抱歉我的错误。嗨@faruk,我已经根据我得到的更新了错误。我已经更新了我的答案,
on Value
事件正在异步查询数据库,所以如果您需要在查询过程后执行一些操作,您需要将其放在函数(快照)中,并尝试这样做。仍然会得到一个错误。我已经发布了屏幕截图。嗨。成功了!谢谢顺便说一句,我得问问。。修改的内容是什么?您已经设置了var managedByName;var-managedByMobile;之前还有别的吗?
 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)
const admin = require('firebase-admin');
var serviceAccount = require("./serviceAccountKey.json");

//just called once
admin.initializeApp({
   credential: admin.credential.cert(serviceAccount),
   databaseURL: "https://[your_project_id].firebaseio.com"
});

exports.sendWelcomeEmail = functions.database.ref('/users/{uid}').onCreate(event => {
    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;
    const managerVal = db.ref('/users/' + managedby).on('value', function(snapshot){
            const managerUser = snapshot.val();
            var managedByName;
            var managedByMobile;
            if(managerUser)
            {
              managedByName = managerUser.name;
              managedByMobile = managerUser.mobile;
            }
            console.log('managerName = ' + managedByName);
            console.log('email = ' + email);

            var data = {
               from: 'no-reply@firebaseapp.com',
               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)
            })

    });


});