Firebase 函数:无法读取未定义的属性“user_id”

Posted

技术标签:

【中文标题】Firebase 函数:无法读取未定义的属性“user_id”【英文标题】:Firebase functions: cannot read property 'user_id' of undefined 【发布时间】:2018-09-13 18:56:15 【问题描述】:

我正在尝试使用我的移动应用程序执行一个简单的 hello world firebase 功能,我想记录用户 ID,以便我可以看到该功能确实有效。 这是我当前的 javascript 代码:

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

exports.sendNotification = functions.database.ref('/notifications/user_id').onWrite((event) => 

  console.log('Testing stuff', event.params.user_id);

  return;
);

当新数据写入特定数据库表时触发,但出现此错误:

TypeError: Cannot read property 'user_id' of undefined
    at exports.sendNotification.functions.database.ref.onWrite (/user_code/index.js:8:44)
    at Object.<anonymous> (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:112:27)
    at next (native)
    at /user_code/node_modules/firebase-functions/lib/cloud-functions.js:28:71
    at __awaiter (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:24:12)
    at cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:82:36)
    at /var/tmp/worker/worker.js:700:26
    at process._tickDomainCallback (internal/process/next_tick.js:135:7)

通知数据库如下所示:

【问题讨论】:

所有来到这里的人请注意:您可能使用的是某些教程的旧版本,该教程尚未更新为使用 Cloud Functions for Firebase API 1.0 版的 API。请通知教程的创建者他们的内容已过时。 【参考方案1】:

您需要安装最新的firebase-functions和firebase-admin:

npm install firebase-functions@latest firebase-admin@latest --save
npm install -g firebase-tools

要能够使用新的 API,请在此处查看更多信息:

https://firebase.google.com/docs/functions/get-started#set_up_and_initialize

改变这个:

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

exports.sendNotification = functions.database.ref('/notifications/user_id').onWrite((event) => 

console.log('Testing stuff', event.params.user_id);

进入这个:

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

exports.sendNotification = functions.database.ref('/notifications/user_id').onWrite((change, context) => 

console.log('Testing stuff', context.params.user_id);

对于onWriteonUpdate 事件,数据参数具有beforeafter 字段。其中每一个都是DataSnapshot,与admin.database.DataSnapshot中提供的方法相同


params

一个对象,其中包含路径参数中通配符的值,该参数提供给实时数据库触发器的 ref() 方法。

更多信息在这里:

Cloud functions v1.0 Changes

EventContext#params

Change

【讨论】:

以上是关于Firebase 函数:无法读取未定义的属性“user_id”的主要内容,如果未能解决你的问题,请参考以下文章

firebase云函数错误TypeError:无法读取未定义的属性“子”

Firebase 函数:无法读取未定义的属性“user_id”

TypeError:无法读取未定义 Firebase 存储反应的属性“参考”

无法在下一个 js 上读取 firebase 中未定义的属性“长度”

尝试通过反应上传到 Firebase 存储。 TypeError:无法读取未定义的属性(读取'ref')

TypeError:无法读取未定义的属性(读取“集合”)-Vuejs 和 Firebase