web-dev-qa-db-ja.com

FirebaseでonUpdate関数を使用する場合、更新されたレコードを取得するにはどうすればよいですか?

Firebaseでクラウド関数を使用しているときに、onUpdateトリガーを使用して、更新されたレコード(つまり、関数をトリガーするレコード)を取得するにはどうすればよいですか? JavaScriptを使用してFirebaseデータベースとやり取りしています。

6
Ryan

onUpdate ハンドラー関数に渡された最初の引数は Change オブジェクトです。このオブジェクトには、2つのプロパティbeforeafterがあります。どちらも DataSnapshot オブジェクトです。これらのDataSnapshotオブジェクトは、関数をトリガーした変更の前後のデータベースの内容を記述します。

exports.foo = functions.database.ref('/location-of-interest')
.onUpdate((change) => {
    const before = change.before  // DataSnapshot before the change
    const after = change.after  // DataSnapshot after the change
})
6
Doug Stevenson

あたり https://firebase.google.com/docs/reference/functions/functions.database.RefBuilder#onUpdate

onUpdate(handler) => function(functions.Change containing non-null functions.database.DataSnapshot, optional non-null functions.EventContext)

したがって、コールバック関数をonUpdate(callback)トリガーに渡すだけでよいと思います。ドキュメントによると、更新されたレコードは最初の引数として渡されるようです。まず、コールバック関数内の引数オブ​​ジェクトをログに記録します。

ドキュメント内の例は次のとおりです。

// Listens for new messages added to /messages/:pushId/original and creates an
// uppercase version of the message to /messages/:pushId/uppercase
exports.makeUppercase = functions.database.ref('/messages/{pushId}/original')
    .onCreate((snapshot, context) => {
      // Grab the current value of what was written to the Realtime Database.
      const original = snapshot.val();
      console.log('Uppercasing', context.params.pushId, original);
      const uppercase = original.toUpperCase();
      // You must return a Promise when performing asynchronous tasks inside a Functions such as
      // writing to the Firebase Realtime Database.
      // Setting an "uppercase" sibling in the Realtime Database returns a Promise.
      return snapshot.ref.parent.child('uppercase').set(uppercase);
    });
0
LexJacobs