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