web-dev-qa-db-ja.com

Cloud Functions for Firebaseを使用してfirebaseリアルタイムデータベースの値を更新する方法

Cloud Functions for Firebaseを使用してリアルタイムデータベースの値を更新するためにFirebaseのドキュメントを調べましたが、理解できません。

私のデータベース構造は

{   
 "user" : {
    "-KdD1f0ecmVXHZ3H3abZ" : {
      "email" : "[email protected]",
      "first_name" : "John",
      "last_name" : "Smith",
      "isVerified" : false
    },
    "-KdG4iHEYjInv7ljBhgG" : {
      "email" : "[email protected]",
      "first_name" : "Max1",
      "last_name" : "Rosse13131313l",
      "isVerified" : false
    },
    "-KdGAZ8Ws6weXWo0essF" : {
      "email" : "[email protected]",
      "first_name" : "Max1",
      "last_name" : "Rosse13131313l",
      "isVerified" : false
    } 
}

データベースのトリガークラウド機能を使用してisVerifiedを更新したい。クラウド関数を使用してデータベース値を更新する方法がわかりません(言語:Node.JS)

データベーストリガーonWriteを使用してユーザーが作成されたときに、ユーザーのキー「isVerified」の値を自動的に更新するコードを書きました。私のコードは

const functions = require('firebase-functions');

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

exports.userVerification = functions.database.ref('/users/{pushId}')
    .onWrite(event => {
    // Grab the current value of what was written to the Realtime Database.
    var eventSnapshot = event.data;

    if (event.data.previous.exists()) {
        return;
    }

    eventSnapshot.update({
        "isVerified": true
    });
});

しかし、コードをデプロイしてユーザーをデータベースに追加すると、クラウド機能のログに以下のエラーが表示されます

TypeError: eventSnapshot.child(...).update is not a function
    at exports.userVerification.functions.database.ref.onWrite.event (/user_code/index.js:10:36)
    at /user_code/node_modules/firebase-functions/lib/cloud-functions.js:35:20
    at process._tickDomainCallback (internal/process/next_tick.js:129:7)

DeltaSnapshotオブジェクトでupdate()を呼び出そうとしています。そのタイプのオブジェクトにはそのようなメソッドはありません。

var eventSnapshot = event.data;
eventSnapshot.update({
    "isVerified": true
});

event.dataDeltaSnapshot です。このオブジェクトによって表される変更の場所でデータを変更する場合。 refプロパティを使用して、Referenceオブジェクトの保持を取得します。

var ref = event.data.ref;
ref.update({
    "isVerified": true
});

また、関数でデータベースを読み書きしている場合は、変更がいつ完了したかを示す 常にPromiseを返す を実行する必要があります。

return ref.update({
    "isVerified": true
});

コメントからフランクのアドバイスを取り入れ、既存の サンプルコードdocumentation を調べて、Cloud Functionsの仕組みをよりよく理解することをお勧めします。

12
Doug Stevenson