web-dev-qa-db-ja.com

FIrebase Firestore onCreateCloud関数イベントパラメータが未定義

Firebaseのドキュメントやその他のSOの投稿に従って、デプロイに成功したクラウド関数のパラメーター値にアクセスしてみました。

残念ながら、私はまだ受け取っています

タイプエラー:未定義のプロパティ 'id'を読み取れません

Event.paramsをログに記録しましたが、未定義として出力されているため、問題は理解できますが、構文的にparam値を導出する方法がわかりません。

以下は参考のために私のjsコードです:

exports.observeCreate = functions.firestore.document('/pathOne/{id}/pathTwo/{anotherId}').onCreate(event => {
  console.log(event.params);

  //event prints out data but params undefined...
  const data = event.data()

  var id = event.params.id;

  return admin.firestore().collection('path').doc(id).get().then(doc => {
    const data = doc.data();
    var fcmToken = data.fcmToken;

    var message = {
      notification: {
        title: "x",
        body: "x"
      },
      token: fcmToken
    };

    admin.messaging().send(message)
      .then((response) => {
        console.log('Successfully sent message:', response);
        return;
      })
      .catch((error) => {
        console.log('Error sending message:', error);
        return;
      });

      return;
  })
})
5
Chris

Firebase-functionsモジュールに1.0より前のAPIを使用していますが、インストールしたモジュールの実際のバージョンは1.0以降です。 APIは1.0で変更されました。 ここで変更について読んでください

Firestore(およびその他のタイプの)トリガーは、タイプ EventContext の2番目のパラメーターを受け取るようになりました。これには、event.paramsにあったデータを含むparamsというプロパティがあります。

exports.observeCreate = functions.firestore.document('/pathOne/{id}/pathTwo/{anotherId}').onCreate((snapshot, context) => {
  console.log(context.params);
  console.log(context.params.id);
});

また、Firestoreトリガーに関する最新情報については、 ドキュメントをお読みください をご覧ください。

9
Doug Stevenson