0

J'ai problème avec le code où très similaire que je cours sur JavaScript ne fonctionne pas sur Node.js:Impossible d'interroger dans l'admin Node.js

exports.findDate = functions.https.onRequest((req, res) => { 
    console.log("helo: " + req.query.text); // this works 

    var ref = admin.database().ref("messages/events"); 
    const query = ref.orderByChild("start").equalTo(req.query.text); 
    query.on("child_added", function(snapshot) { 
     console.log(snapshot.val().title); 
     res.status(200).send('ok1' + snapshot.toJSON().title); 
    }); 
    res.status(200).send('ok'); //this print in browser 
}); 

Étrangement, seules choses en dehors du travail de recherche. Qu'est-ce qui peut le provoquer?

code mis à jour:

exports.getEvents = functions.https.onRequest((req, res) => { 

     admin.database().ref('events').orderByValue().once('value', function(snapshot) { 
      console.log(snapshot.val().title); 
      res.status(200).send('ok1'); 
     }).catch(error => { 
      console.error('Error while reading data', error); 
      res.status(403).send('Error'); 
     }); 
    }); 

enter image description here

Répondre

0

Vous devez utiliser:

query.once('value', function(snapshot) { 
    console.log(snapshot.val().title); 
    res.status(200).send('ok1' + snapshot.toJSON().title); 
}); 
+0

encore reçu 'ok' au lieu de' ok1' –

0

Vous ne pouvez pas renvoyer deux statuts. Comme le .once est asynchrone, le statut de 'ok' est renvoyé avant que ce travail soit terminé. Si vous vérifiez la console Firebase, vous aurez probablement quelques erreurs indiquant que vous essayez d'envoyer plus d'une réponse. J'ai essayé votre code tel quel et j'ai obtenu une erreur comme ceci: enter image description here

Vous n'avez pas besoin d'envoyer la deuxième réponse d'état. Si vous êtes à la recherche d'inclure un bloc catch, vous pouvez le faire comme ceci:

query.once('value', function(snapshot) { 
    console.log(snapshot.val().title); 
    res.status(200).send('ok1'); 
}).catch(error => { 
    console.error('Error while reading data', error); 
    res.status(403).send('Error'); 
}); 
+0

On dirait qu'il travaille maintenant - a à faire plus de tests :) Une question : les fonctions cloud sont-elles toujours aussi lentes? Faire des opérations à partir du client est tellement plus rapide que de le faire via Cloud. –

+0

D'accord, ça ne marche pas:/Il est timeout tout le temps ... –

+0

On dirait que plus d'informations peuvent être nécessaires. Ajoutez vos journaux de la console Firebase à votre question et mettez à jour votre code à partir de votre question pour montrer à quoi il ressemble maintenant. –