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.data
は DeltaSnapshot です。このオブジェクトによって表される変更の場所でデータを変更する場合。 ref
プロパティを使用して、Referenceオブジェクトの保持を取得します。
var ref = event.data.ref;
ref.update({
"isVerified": true
});
また、関数でデータベースを読み書きしている場合は、変更がいつ完了したかを示す 常にPromiseを返す を実行する必要があります。
return ref.update({
"isVerified": true
});
コメントからフランクのアドバイスを取り入れ、既存の サンプルコード と documentation を調べて、Cloud Functionsの仕組みをよりよく理解することをお勧めします。