2
votes

HTTP POST Fonctions Google Cloud NodeJS

Comment écrire une fonction Google Cloud qui recevra une requête HTTP, puis enverra une requête HTTP POST à ​​un autre point de terminaison?

Par exemple,

  • Je peux envoyer le déclencheur HTTP à ma fonction cloud ( https : //us-central1-plugin-check-xxxx.cloudfunctions.net/test ). J'utilise exports.test = function helloWorld (req, res) {} pour traiter les données reçues.

  • Ensuite, je souhaite envoyer les données traitées avec une requête HTTP POST à ​​un autre point de terminaison.

J'ai de loin essayé d'envoyer HTTP POST avec des modules node-webhooks, request & restler mais aucun d'eux ne semble fonctionner. Est-ce parce que ces modules sont utilisés en conjonction avec exports.test ?

Ma question porte sur cette question, mais les réponses ne m'ont pas aidé.

Les données envoyées au point de terminaison sont en json & Content-type: application / json .

var request = require('request'); //also tried for node-webhook, restler modules

exports.test = function(req, res) {
 //processing of received json data from source A. 
}

function sendToEndpoint(processed_data) {

  let abc = processed_data;   //send processed data to source B 

  request.post({
      uri: 'https://example.com',
      headers: {'Content-Type': 'application/json'},
      body: JSON.stringify(abc)
  }); 

}


8 commentaires

Double-possible de la fonction Google Cloud pour récupérer des données auprès d'un tiers serveur


@RenaudTarnec, non ma question n'est pas liée à ça. Je n'ai aucun problème à recevoir les données. Je rencontre des difficultés pour faire une requête HTTP (s) POST à ​​partir de la fonction cloud.


C'est exactement ce que couvre cette réponse: comment émettre une requête HTTP POST vers un point de terminaison externe, depuis la fonction Cloud .


Veuillez montrer le code que vous avez essayé et quel a été le résultat.


@RenaudTarnec, Comme je l'ai mentionné, j'ai déjà essayé ces modules mais ils ne semblent pas fonctionner.


@ Electric_90 Désolé d'insister, mais le code de cette réponse fonctionne. Vous noterez que la bibliothèque de demande-promesse node.js est utilisée, qui est une "demande" client de requête HTTP simplifiée avec prise en charge de Promise ". Vous pouvez publier le code que vous avez essayé si vous avez besoin d'aide supplémentaire.


@RenaudTarnec, merci pour votre aide, Y a-t-il une sorte de modification nécessaire dans les paramètres de la fonction cloud pour que le webhook fonctionne? J'ai déployé ma fonction cloud avec les fonctions bêta de gcloud.


@ Electric_90 Pour être honnête, je ne sais pas ... mon expérience avec Cloud Functions est limitée à celles de Firebase, déployées via la CLI Firebase. Mais d'après ce que je sais, il ne devrait y avoir aucune différence dans ce cas. Le seul point que je peux voir est qu'avec Firebase CF, vous devez être sur le plan tarifaire "Flame" ou "Blaze".


3 Réponses :


0
votes

Utiliser des Websockets SOCKET.IO est le meilleur choix. https://socket.io/

Cependant, il est impossible de l'utiliser dans les fonctions cloud. Parce qu'il est distribué dans différentes machines. Il est donc impossible de garder une trace.


2 commentaires

Mais vous pouvez modifier une valeur de base de données qui devrait être ouverte par un autre utilisateur. Ensuite, il peut l'obtenir en temps réel


J'ai utilisé cette méthode pour un jeu en ligne



1
votes

Dans une fonction cloud écrite en Node.js, vous pouvez utiliser n'importe quel package accessible via NPM. Utiliser la recherche Google pour trouver de tels packages montre:

Le choix que vous choisissez est généralement une question de goût. Mon choix personnel est d'utiliser celui qui fait le travail et qui est le plus populaire. J'assimile la popularité à la probabilité d'un support et de mises à jour continus.


1 commentaires

Le message 4 + 1 mène à un 404. la nouvelle URL est ici valentinog.com/blog/http-js



2
votes

Comme @RenaudTarnec l'a mentionné dans les commentaires, le problème était que mon compte de facturation n'était pas configuré.

Google n'autorise pas les demandes sortantes vers des serveurs externes sans informations de facturation valides afin d'éviter toute activité malveillante.

Après avoir configuré un compte de facturation, j'ai pu faire des requêtes sortantes et tous les modules de nœuds mentionnés dans la question ont fonctionné.


2 commentaires

que faire si vous souhaitez analyser la réponse du serveur?


le module request a été obsolète en février 2020, le code ci-dessus n'est donc plus idéal.