2017-09-22 1 views
0

J'essaie d'utiliser les fonctions de cloud Firebase pour créer un proxy à un API JSON externe. Mais maintenant, j'essaie juste de tout mettre en place.Pourquoi toutes mes fonctions de cloud Firebase expirent-elles?

j'ai écrit cette fonction:

exports.helloWorld = functions.https.onRequest((request, response) => { 
    request.get('http://www.google.com', function (error, response, body) { 
    if (!error && response.statusCode == 200) { 
     console.log(body) // Print the google web page. 
    } 
    }) 
}); 

Je cours alors l'émulateur fonctions firebase et exécuter

curl http://localhost:5000/<project-id>/us-central1/helloWorld 

Il retourne un message indiquant que la fonction a été déclenchée, l'exécution de départ, mais il se trouve juste là et tourne jusqu'à ce que finalement il expire.

{"error":{"code":500,"status":"INTERNAL","message":"function execution attempt timed out"}} 

Je ne suis pas sûr de ce que je fais mal.

........

EDIT

Cette fonction fonctionne parfaitement:

exports.helloWorld = functions.https.onRequest((request, response) => { 
    response.send('test'); 
}) 

Répondre

5

Avec fonctions de Cloud, les fonctions de type HTTPS sont tenus d'écrire un résultat à la client pour indiquer que la fonction est exécutée. Jusqu'à ce qu'un résultat soit écrit, la fonction est supposée exécuter encore quelque chose de travail asynchrone. Ainsi, lorsque votre requête est terminée, vous devriez envoyer une réponse, même si elle est vide. Malheureusement, vous avez Ténébreux votre principal objet response avec un autre, de sorte que vous devriez probablement renommer un d'entre eux:

exports.helloWorld = functions.https.onRequest((request, response) => { 
    request.get('http://www.google.com', function (error, res, body) { 
    if (!error && res.statusCode == 200) { 
     console.log(body) // Print the google web page. 
    } 
    return response.send("") // this terminates the function 
    }) 
}) 
+0

Je copié et collé votre fonction exacte et il encore temps dehors mais je Je sais que la configuration de Firebase est correcte parce que si je viens d'envoyer une réponse avec une chaîne ça marche Voir mon edit – reknirt

+0

Je mets un retour avant l'envoi - ça devrait le réparer –

+0

Je suis désolé d'être difficile et j'apprécie votre aide Je pensais que ça pourrait être un autre problème d'ombre, mais j'ai aussi essayé des variantes, j'ai essayé d'autres URLs en plus de Google et de la même chose. ? – reknirt

3

fonctions HTTPS ne pas complète jusqu'à ce que vous envoyez quelque chose sur la réponse. Voici un exemple que seulement des tuyaux le contenu de la demande approximé que la sortie (je devais changer le nom des variables pour éviter shadowing.

exports.helloWorld = functions.https.onRequest((req, res) => { 
    request.get('http://www.google.com', function (error, response, body) { 
    if (!error && response.statusCode == 200) { 
     return res.send(body) // Print the google web page. 
    } 
    return res.send('ERROR: ' + error.message); 
    }) 
});