web-dev-qa-db-ja.com

Firebase関数:未定義のプロパティ 'user_id'を読み取れません

モバイルアプリで単純な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

6
ZeppRock

最新の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);

onWriteおよびonUpdateイベントの場合、dataパラメーターにはbeforeおよびafterフィールドがあります。これらはそれぞれDataSnapshotで、同じメソッドが admin.database.DataSnapshot で使用できます。


params

Realtime Databaseトリガーのref()メソッドに提供されるパスパラメーターにワイルドカードの値を含むオブジェクト。

詳細はこちら:

Cloud functions v1.0の変更点

EventContext#params

変更

18
Peter Haddad