Firebase: check for 'write or delete' for onWrite Events

I have the following functions that listen for the onWrite event for a database trigger as follows:

exports.sendNotifications = functions.database.ref('/events/{eventId}/registered')
        .onWrite(event => {

            ...
         });

The above function is called regardless of whether node is removed or added. How to check if the onWrite event is a “delete” event for this particular node or “add” event, so that this function is called only when it is an “add”.

+8
source share
6 answers

event, , , , . , , .

Firebase :

exports.makeUppercase = functions.database.ref('/messages/{pushId}/original')
.onWrite(event => {
  // Only edit data when it is first created.
  if (event.data.previous.exists()) {
    return;
  }
  // Exit when the data is deleted.
  if (!event.data.exists()) {
    return;
  }
+8

Cloud Firestore, :

// Only edit data when it is first created.
  if (event.data.previous.exists) {
    return;
  }
  // Exit when the data is deleted.
  if (!event.data.exists) {
    return;
  }
+2

if-then : https://firebase.googleblog.com/2017/07/cloud-functions-realtime-database.html

exports.sendNotification = functions.database
        .ref("/messages/{messageId}").onWrite(event => {
     if (event.data.exists() && !event.data.previous.exists()) {
        // This is a new message, not a change or a delete.
        // Put code here
    }
})

(, ???), event.data.previous.exists() . event.data.exists() , , .

+2

OnWrite , . , Firestore.

if(event.after.data == undefined){ 
  // Deleted: data before but no data after
  console.log('Deleted');
}

if(event.before.data && event.after.data){ 
  // Updated: data before and data after
  console.log('Update');
}

if(!event.before.data && event.after.data){ 
  // Created: no data before but data after
  console.log('Created');
}
+1

.onCreate, , , . ( , onWrite onCreate <= v0.9.1 > 1.0.0).

:

exports.sendNotifications = functions.database.ref('/events/{eventId}/registered')
        .onCreate((snap, context) => {
          const data = snap.val();
          // ^ the value of the newly inserted data
          // context.params contains all of the wildcard fields used in the document reference.
         });
0

, onCreate() onCreate().

, add onWrite() before after Change:

exports.sendNotifications = functions.database.ref('/events/{eventId}/registered')
  .onWrite((change, context) => {
    if (change.before.exists()) {
      //update event
      return null;
    } else if (!change.after.exists()) {
      //delete event
      return null;
    } else {
      //add event
      //do stuff
    }

  });

Find more information in the documentation:

https://firebase.google.com/docs/functions/database-events#handle_event_data

0
source

All Articles