web-dev-qa-db-fra.com

Appel d'une fonction cloud à partir d'une autre fonction cloud

J'utilise une fonction cloud pour appeler une autre fonction cloud sur le niveau gratuit spark.

Existe-t-il un moyen spécial d'appeler une autre fonction cloud? Ou utilisez-vous simplement une demande http standard?

J'ai essayé d'appeler l'autre fonction directement comme ceci:

exports.purchaseTicket = functions.https.onRequest((req, res) => {    
  fetch('https://us-central1-functions-****.cloudfunctions.net/validate')
    .then(response => response.json())
    .then(json => res.status(201).json(json))
})

Mais j'ai l'erreur

FetchError: demande à https: // us-central1-functions- ****. Cloudfunctions.net/validate a échoué, raison: getaddrinfo ENOTFOUND us-central1-functions - *****. Cloudfunctions .net us-central1-functions - *****. cloudfunctions.net:443

Ce qui semble être une base de feu qui bloque la connexion, bien qu'elle appartienne à Google, et qu'elle ne devrait donc pas être verrouillée

le plan Spark autorise uniquement les requêtes réseau sortantes vers les services appartenant à Google.

Comment puis-je utiliser une fonction cloud pour appeler une autre fonction cloud?

25
ro-savage

Vous n'avez pas besoin de passer par la difficulté d'invoquer certaines fonctionnalités partagées via un tout nouvel appel HTTPS. Vous pouvez simplement résumer les bits de code communs dans une fonction javascript régulière qui est appelée par l'un ou l'autre. Par exemple, vous pouvez modifier la fonction helloWorld du modèle comme ceci:

var functions = require('firebase-functions');

exports.helloWorld = functions.https.onRequest((request, response) => {
  common(response)
})

exports.helloWorld2 = functions.https.onRequest((request, response) => {
  common(response)
})

function common(response) {
  response.send("Hello from a regular old function!");
}

Ces deux fonctions feront exactement la même chose, mais avec des points de terminaison différents.

17
Doug Stevenson