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

firebase云函数无法读取未定义的属性“ref”

汪深
2023-03-14

当我想从实时数据库更新CloudFireStore时,我部署了下面的代码,结果出错。

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

const firestore = functions.firestore;

exports.onUserStatusChange = functions.database
    .ref('/status/{userId}')
    .onUpdate(event => {

        var db = admin.firestore();


        //const usersRef = firestore.document('/users/' + event.params.userId);
        const usersRef = db.collection("users");
        var snapShot = event.data;

        return event.data.ref.once('value')
            .then(statusSnap => snapShot.val())
            .then(status => {
                if (status === 'offline'){
                    usersRef
                        .doc(event.params.userId)
                        .set({
                            online: false,
                            last_active: Date.now()
                        }, {merge: true});
                }
            })
    });

TypeError:无法读取导出时未定义的属性“ref”。改变现状。功能。数据库参考onUpdate。事件(/user\u code/index.js:18:20)在cloudfunctionnewsignation(/user\u code/node\u modules/firebase functions/lib/cloud functions.js:105:23)在cloudFunction(/user\u code/node\u modules/firebase functions/lib/cloud functions.js:135:20)在/var/tmp/worker/worker。js:733:24在程序中_tickDomainCallback(内部/process/next_tick.js:135:7)

共有2个答案

端木明贤
2023-03-14

尝试更改下面的代码,因为事件上的Firebase函数不再具有两个属性。所以,裁判的位置是:

.onUpdate((event,context) => {
 ....
return event.ref.once('value')
...

事件。数据不再存在,而是事件。val()以获取更多信息,并且事件具有如下属性

逄学潞
2023-03-14

看起来您已经获得了Firebase云函数的测试版代码。语法在1.0版本中已更改。从有关升级云功能的文档中:

或者onWrite和onUpdate事件,数据参数具有before和after字段。每一个都是一个DataSnapshot,其方法与admin中提供的方法相同。数据库数据快照。例如:

之前(

exports.dbWrite = functions.database.ref('/path').onWrite((event) => {
  const beforeData = event.data.previous.val(); // data before the write
  const afterData = event.data.val(); // data after the write
});

现在(

exports.dbWrite = functions.database.ref('/path').onWrite((change, context) => {
  const beforeData = change.before.val(); // data before the write
  const afterData = change.after.val(); // data after the write
});

因此,您需要使用:

  • 。onUpdate((更改、上下文)=

因为这段代码似乎大部分是从某个地方复制的,所以我建议从那里获得一个更新版本。例如,您的代码可能基于的Firestore文档包含以下最新示例:https://firebase.google.com/docs/firestore/solutions/presence#updating_globally

 类似资料:
  • 当我尝试使用Firebase部署--Only函数命令部署到一个新的Firebase项目时,我收到了这个错误。我有两个正在使用的项目,一个开发人员和一个prod,我正在处理prod和部署现在也工作得很好,但是当我添加这个项目开发时,部署在prod中保持工作良好,但在这个新项目开发中没有。相反,我得到了这个错误: 错误:解析函数触发器时发生错误。 TypeError:无法读取Object上未定义的属性

  • 问题内容: 我正在尝试使用移动应用程序做一个简单的hello world firebase函数,我想记录用户ID,以便可以看到该函数确实起作用。这是我当前的JavaScript代码: 当新数据写入特定的数据库表时,它会触发,但是会出现此错误: 通知数据库如下所示: 问题答案: 您需要安装最新的firebase-functions和firebase-admin: 为了能够使用新的API,请在此处查看

  • 我是Firebase函数的新手,在官方文档中看到了一些变化,但是当我在做一个通知系统时,当我试图获取我的令牌id时,它抛出了这个错误。 我的代码 错误 无法在导出处读取未定义的属性“val”.js user_code。(/user_code/node_modules/火库函数/库/云函数.js:112:27) 在下一个 (本机) 在 /user_code/node_modules/火基函数/库/云

  • 为什么我得到这个错误不能读取未定义的触摸属性? 为什么它不能读取,但它可以读取 当我们使用

  • 问题内容: 我正在制作非常简单的react应用。但是,当我尝试通过onChange事件调用父(实际上是祖父母)组件的方法时,我一直在获取。 这是触发事件的组件/表单(因此,在绑定的父组件上调用方法…是的,因为我通过道具将其从父组件传递下来,所以在方法上使用了.bound(this)。) 这是我如何通过大多数父(祖父母)组件中的props传递该方法的方法。 这是我作为父项(方法所有者和方法调用程序之

  • 我正在测试发送电子邮件与流星js和nodemailer插件: 流星添加捷运:流星NodeEmailer 当页面加载时,我在导航器的控制台上看到错误:无法读取未定义的属性“创建运输”。 那么问题是什么呢? 代码如下: /////////////////////////////////////////// ///////////////