Firebase functions: cannot read property 'user

2019-01-01 06:05发布

问题:

I am trying to do a simple hello world firebase function with my mobile app, I want to log the user ID so I can see that the function does work. This is my current javascript code:

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;
});

It does trigger when new data is written to specific databasetable but this error shows up:

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)

The notification database looks like this: \"enter

回答1:

You need to install the latest firebase-functions and firebase-admin:

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

to be able to use the new API, check here for more info:

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

Change this:

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);

into this:

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);

For onWrite and onUpdate events, the data parameter has before and after fields. Each of these is a DataSnapshot with the same methods available in admin.database.DataSnapshot


params

An object containing the values of the wildcards in the path parameter provided to the ref() method for a Realtime Database trigger.

more info here:

Cloud functions v1.0 Changes

EventContext#params

Change