Firebase功能:无法读取属性' user_id'未定义的

时间:2018-04-04 09:17:07

标签: node.js firebase firebase-realtime-database firebase-cloud-messaging google-cloud-functions

我正在尝试使用我的移动应用程序执行简单的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)

通知数据库如下所示: enter image description here

1 个答案:

答案 0 :(得分:12)

您需要安装最新的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个字段。其中每个都是DataSnapshotadmin.database.DataSnapshot

中提供的方法相同
  

params

     

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

更多信息:

Cloud functions v1.0 Changes

EventContext#params

Change