web-dev-qa-db-fra.com

Comment envoyer une requête HTTP à partir de Google Cloud Functions (nodeJS)

C'est probablement une question simple, mais je suis novice dans les fonctions cloud/la programmation de nœuds et je n'ai pas encore trouvé la bonne documentation. 

Comment puis-je écrire une fonction Google Cloud qui recevra une requête HTTP, puis envoie une requête HTTP à 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/HelloWorldTest ). Plus tard dans le projet, je découvrirai comment mettre en œuvre un délai. Mais ensuite, je souhaite répondre avec une nouvelle requête HTTP à un autre terminal ( https://maker.ifttt.com/trigger/arrive/with/key/xxxx ). Comment je fais ça? 

exports.helloWorld = function helloWorld(req, res) {
  // Example input: {"message": "Hello!"}
  if (req.body.message === undefined) {
    // This is an error case, as "message" is required.
    res.status(400).send('No message defined!');
  } else {
    // Everything is okay.
    console.log(req.body.message);
    res.status(200).send('Success: ' + req.body.message);
    // ??? send a HTTP request to IFTTT endpoint here
  }
};
4
Mark Peterson

Voici le code que j'ai réussi à obtenir avec l'aide de Chetan Kanjani. Lorsque j'envoie un message texte à mon noeud final de fonction Google Cloud, il répond par un message texte à IFTTT (un autre noeud final). 

const request = require('request');

exports.helloWorld = function helloWorld(req, res) {
  // Example input: {"message": "Hello!"}
  if (req.body.message === undefined) {
    // This is an error case, as "message" is required.
    res.status(400).send('No message defined!');
  } else {
    // Everything is okay.
    console.log(req.body.message);

    request.get('https://maker.ifttt.com/trigger/arrival/with/key/xxxx', function (error, response, body) {
      console.log('error:', error); // Print the error if one occurred 
      console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received 
      console.log('body:', body); //Prints the response of the request. 
    });
    res.status(200).send("Success");
  }
};

J'ai également dû modifier le fichier package.json pour inclure le package de demande. Il avait déjà le paquet sample-http, j'ai ajouté les dépendances: 

{
  "name": "sample-http",
  "version": "0.0.1",
  "dependencies": {
    "request": "^2.81.0"
  }
}

Je ne sais toujours pas où la fonction console.log affiche les informations. Cela pourrait être utile pour le débogage futur. 

9
Mark Peterson

Le module de demande utilise des rappels. Si vous souhaitez utiliser les promesses JavaScript à la place, le module Axios fournit des fonctionnalités équivalentes.

4
Rohan Jayasekera

Utilisez https://www.npmjs.com/package/request module.

var request = require('request');
request.get('https://maker.ifttt.com/trigger/arrive/with/key/xxxx', function (error, response, body) {
  console.log('error:', error); // Print the error if one occurred 
  console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received 
  console.log('body:', body); //Prints the response of the request. 
});
2
Chetan Kanjani

Vieux, mais je suis tombé sur ça en cherchant moi-même: 

module de requête avec support de promesse est ( request-promise )

1
OtterJesus