当前位置: 首页 > 知识库问答 >
问题:

如何从Cloud Functions访问和操作Firebase数据库?

符俊材
2023-03-14

我正在向用户发送动态通知。因此,我正在处理Firebase云函数。这里是我的问题:我如何访问云功能端的数据库

这是我的代码:

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




// // 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!");
// });

admin.initializeApp(functions.config().functions);


var newData;



//exports.myTrigger= functions.firestore.document().




exports.notificationTrigger = functions.firestore.document(`notifications/{notificationId}`).onCreate(async (snapshot, context) => {


    if (snapshot.empty) {
        console.log('No Devices');
        return;
    }
  var notificationData = snapshot.data();
  // notificationData.email;
  console.log(`Data  is : ${notificationData.email}`);


      admin.database().ref(`users/${notificationData.email}/deviceToken`).then((snapshot) => {
            var token = snapshot.data();
            console.log('token',token)
            return 1;
        }).catch(err => {
            console.error(err);

        }); 





    var tokens = [
        `${token.deviceToken}`
    ];



    var payload = {
        notification: {
            title: `Yeni Eklenen Değerin Maili : ${notificationData.email}`,
            body: 'hüsen',
            sound: 'default',
        },
        data: {
            click_action: 'FLUTTER_NOTIFICATION_CLICK',
            Messages:'Baba Mesajı from otomatik fonksiyon'
        },
    };

    try {
        const response = await admin.messaging().sendToDevice(tokens, payload);
        console.log('Notification sent successfully');
    } catch (err) {
        console.log(err);
    }
});  

正如你们所看到的,首先,我想从nofications集合中获取电子邮件,然后使用该电子邮件,我想搜索正在使用该电子邮件的用户,然后,我想获取用户deviceToken。

我尝试了很多关于语法的东西,但没有得到任何结果:/

同样,我也犯了一些错误:

在这里您可以看到错误:

  • 参考资料。child失败:第一个参数是无效的path=“users”/patientaccount@gmail.com/deviceToken“.路径必须是非空字符串,并且不能包含”。在validatePathString(/srv/node_modules/@firebase/database/dist/index.node.cjs:1667:15)在validateRotPathString(/srv/node_modules/@firebase/database/dist/index.node.cjs:1679:5)在Reference.child(/srv/node_modules/@firebase/database/dist/index.node/index.node.node.cjs:13843:17)在database.ref(/srv/node_modules/dist/index.js/index.js:1507)在ref.js在出口方面。通知触发。功能。消防商店。文件onCreate(/srv/index.js:37:24)at cloudFunction(/srv/node_modules/firebase functions/lib/cloud functions.js:131:23)at/worker/worker。js:825:24在过程中_tickDomainCallback(内部/process/next_tick.js:229:7)

共有1个答案

宋正真
2023-03-14

错误消息告诉您出了什么问题:

参考child失败:第一个参数是无效的path=“users”/patientaccount@gmail.com/deviceToken“.路径必须是非空字符串,并且不能包含”。“,”#“,“$”,“[”或“]”

包含电子邮件地址的路径具有无效字符

如果您想存储每个用户的数据,您应该使用用户帐户的唯一ID。出于各种原因,电子邮件地址并不是很好的唯一标识符。

 类似资料:
  • 把日志放在各处,我发现它到达了语句。但是,回调从未被调用。 它卡在那一点上。没有错误。没有例外。 最大的问题是,从那时起,它停止了整个应用程序的所有回调。我的所有活动都被阻止了,因为它从不调用。看起来它在内部崩溃或被线程阻塞。

  • 目前,我尝试学习nestjs,因此我遵循官方(cat-)教程构建了一个基本的用户身份验证系统。 当您访问API以更改用户名或密码时,请求应检查用户是否为有效用户(从数据库读取用户)。为了存储用户,我已经有了mongodb连接。 我目前正在琢磨如何在警卫中获得数据库模块/访问权限。 防护正在工作,但只返回true,我尝试注入数据库模块,但没有成功。 使用findOne方法扩展UserService类

  • 本文向大家介绍php批量删除操作(数据访问),包括了php批量删除操作(数据访问)的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了php批量删除操作的具体代码,供大家参考,具体内容如下 1.批量删除页面 piliangcaozuo.php 引用的封装类 DBDA.class1.php 2.删除处理界面 sanchu.php 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家

  • 问题内容: 我有一个Iron-router路由,我想通过它通过HTTP POST请求接收经纬度数据。 这是我的尝试: 但是查询服务器: 返回。 也许不包含发布数据?我试图检查对象和请求,但找不到。 问题答案: Iron- router中的连接框架使用bodyParser中间件来解析主体中发送的数据。bodyParser使该数据在对象中可用。 以下对我有用: 这给了我: 另请参见此处:http :

  • 我试图创建一个简单的程序,从用户的名字,手机号码和电子邮件地址,然后把数据在Firebase实时数据库。 有3个输入框和一个按钮,按一下就可以完成上面的操作。代码如下: 我这样设置了消防基地:

  • 我目前有一个类似以下的数据库结构。如果无法在Firebase实时数据库安全规则中循环,我如何基于用户对多个组的访问来保护数据?要遵循的例子... 数据库结构: 我如何在上指定安全规则,以基于中指定的任何组与当前用户的