无法从 firebase 数据库中检索数据(云功能)

Posted

技术标签:

【中文标题】无法从 firebase 数据库中检索数据(云功能)【英文标题】:can't retreive data from firebase database ( cloud functions ) 【发布时间】:2018-02-01 11:47:48 【问题描述】:

我正在使用 firebase 云函数来监听数据库值事件,这是我的代码

    var functions = require('firebase-functions');
var firebase = require('firebase-admin');

var serviceAccount = require("./serviceAccountKey.json");

firebase.initializeApp(
    credential : firebase.credential.cert(serviceAccount),
    databaseURL: "https://*******.firebaseio.com"
);

exports.notifications = functions.database.ref('/chat/senderID/destinationID/messages/pushID')
    .onWrite(event =>         
        var eventSnapshot = event.data;        
        var sender = eventSnapshot.child('sender').val();
        var message = eventSnapshot.child('message').val();
        var destination = eventSnapshot.child('destination').val();        
        if (event.params.senderID === sender) 
            sendMessage(message,sender,destination);    
    
);

function sendMessage(message, sender, destination) 

    var senderUser = firebase.database().ref('users/'+sender+'/name'); 
    var tokenUser = firebase.database().ref('fcm/'+destination+'/token');
        tokenUser.once('value').then(function(tokenSnapshot) 
            var token = tokenSnapshot.val(); 
                        console.log(token);                        

    , function (errorObject) 
  console.log("The read failed: " + errorObject.code);
);     

onWrite函数正常执行,但tokenUser.once()没有执行。

【问题讨论】:

这是真的吗? event.params.senderID === sender 。将一些日志语句与它们的输出一起放在那里,这样我们至少可以知道你运行它时发生了什么。 sendMessage 函数正在执行,我用日志对其进行了测试,所以问题出在数据检索函数上 您的 DB 中有 fcm/'+destination+'/token 的内容吗? 是的,这是一条正确的路径 我有,但如果我没记错的话,我遇到了一个空值只输出换行符(而不是未定义或空值)的问题。因此,您可能需要仔细检查以下情况是否没有发生:console.log('my token is ', token); 【参考方案1】:

也许如果你尝试使用tokenUser.once('value') 并且不传递函数,直接获取tokenSnapshot;像这样:

tokenUser.once('value').then(tokenSnapshot => 
        var token = tokenSnapshot.val(); 
        console.log(token);                        

);     

如果你使用带有回调的tokenUser.once(),你可以传递函数;像这样:

tokenUser.once('value', function(tokenSnapshot) 
        var token = tokenSnapshot.val(); 
                    console.log(token);                        

, function (errorObject) 
  console.log("The read failed: " + errorObject.code);
);   

【讨论】:

以上是关于无法从 firebase 数据库中检索数据(云功能)的主要内容,如果未能解决你的问题,请参考以下文章

如果无法从 Firebase 实时数据库中检索数据,则尝试在 UITableView 上显示消息

无法从短动态链接中检索数据 - Firebase

无法从unity3d中的firebase实时数据库中检索数据

无法从firebase实时数据库检索数据到recyclerview [重复]

无法从firebase数据库android,recycler视图中检索数据

Firebase 云功能不发送异步推送通知