web-dev-qa-db-fra.com

comment mettre à jour une valeur dans la base de données en temps réel de Firebase à l'aide de Cloud Functions for Firebase

Je suis passé par les documents Firebase pour mettre à jour une valeur dans la base de données en temps réel à l'aide de Cloud Functions for Firebase, mais je ne suis pas en mesure de comprendre.

Ma structure de base de données est

{   
 "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
    } 
}

Je souhaite mettre à jour l'isVerified à l'aide des fonctions de cloud de déclenchement de base de données. Je ne sais pas comment mettre à jour une valeur de base de données à l'aide des fonctions cloud (langue: Node.JS)

J'ai écrit un code pour mettre à jour automatiquement la valeur de la clé "isVerified" d'un utilisateur, lorsque l'utilisateur est créé à l'aide du déclencheur de base de données onWrite. Mon code est

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
    });
});

mais lorsque je déploie le code et que j'ajoute un utilisateur à la base de données, le journal des fonctions cloud affiche l'erreur ci-dessous

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)
10

Vous essayez d'appeler update () sur un objet DeltaSnapshot. Il n'y a pas une telle méthode sur ce type d'objet.

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

event.data est un DeltaSnapshot . Si vous souhaitez modifier les données à l'emplacement du changement représenté par cet objet. Utilisez sa propriété ref pour saisir un objet Reference:

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

De plus, si vous lisez ou écrivez la base de données dans une fonction, vous devez toujours renvoyer une promesse qui indique quand le changement est terminé:

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

Je recommanderais de prendre les conseils de Frank dans les commentaires et d'étudier les exemple de code et documentation existants pour mieux comprendre le fonctionnement des fonctions cloud.

12
Doug Stevenson