Javascript firebase云函数无法读取属性';参考';未定义的

Javascript firebase云函数无法读取属性';参考';未定义的,javascript,firebase,firebase-realtime-database,google-cloud-functions,Javascript,Firebase,Firebase Realtime Database,Google Cloud Functions,当我想从实时数据库更新CloudFireStore时,我部署了下面的代码,结果出错 const functions = require('firebase-functions'); const admin = require('firebase-admin'); admin.initializeApp(functions.config().firebase); const firestore = functions.firestore; exports.onUserStatusChange

当我想从实时数据库更新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” 位于exports.onUserStatusChange.functions.database.ref.onUpdate.event(/user\u code/index.js:18:20) 在cloudFunctionNewSignature(/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) at/var/tmp/worker/worker.js:733:24
在进程中。_tickDomainCallback(internal/process/next_tick.js:135:7)

尝试更改以下代码,因为事件上的firebase函数还有两个属性。所以,ref位置是:

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

event.data
不再存在,而是
event.val()
for and
event
event

尝试更改下面的代码,因为事件上的firebase函数还有两个属性。所以,ref位置是:

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

event.data
不再存在,而是
event.val()
for和
event
拥有看起来您获得了Firebase云函数测试版的代码。语法在1.0版本中已更改。从:

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

之前(=v1.0.0)

因此,您需要使用:

  • .onUpdate((更改,上下文)=>{
    来声明函数,而不是
    .onUpdate(事件=>{
  • 使用
    change.after
    引用数据,而不是
    event.data
  • 使用
    change.after.ref.once('value')
    ,而不是
    event.data.ref.once('value')

由于这段代码似乎大部分是从某个地方复制的,我建议从那里获取更新版本。例如,您的代码可能基于的Firestore文档在此处包含一个最新示例:

看起来您获得了Firebase云函数的测试版代码。语法在the 1.0版本。来自:

或者onWrite和onUpdate事件,数据参数具有before和after字段。每个字段都是DataSnapshot,具有admin.database.DataSnapshot中可用的相同方法。例如:

之前(=v1.0.0)

因此,您需要使用:

  • .onUpdate((更改,上下文)=>{
    来声明函数,而不是
    .onUpdate(事件=>{
  • 使用
    change.after
    引用数据,而不是
    event.data
  • 使用
    change.after.ref.once('value')
    ,而不是
    event.data.ref.once('value')

由于此代码似乎大部分是从某个地方复制的,因此我建议从那里获取更新版本。例如,您的代码可能基于的Firestore文档在此处包含一个最新示例:

抱歉,我有相同的问题剩余的
事件
属性需要更新
event.params.userId
to
context.auth.uid
依此类推。尝试更新所有。(尝试将事件、上下文和快照属性记录到console.log中)此代码中的错误函数为.database.ref(“/status/{userId}”)我从本教程中获得了这段代码“一切都是工作的,只是函数在这里不工作”链接,您可以使用相同的任务。这是客户端代码。因此,您也可以用它来解决它。或者,如果您想在服务器端使用,可以在云函数中转换它。注意:抱歉,我有相同的问题剩余的
事件
属性需要更新
事件。params.userId
context.auth.uid
等等。尝试更新所有。(尝试console.log事件、上下文和快照属性)此代码中的错误函数为.database.ref(“/status/{userId}”)我从本教程中得到了这段代码“一切都是工作的,只是函数在这里不工作”链接,你可以使用相同的任务。这是客户端代码。因此,你也可以用它来解决它。如果你想在服务器端使用它,也可以在云函数中转换它。:thank u@Frank,那么这行事件呢。params.useri在同一页上:thank u@Frank,w关于同一页上的event.params.useri行:
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
});