Gebruik de firebase-cloudfunctie om POST-verzoeken naar een niet-Google-server te verzenden

Ik vroeg me af of het mogelijk is om een ​​firebase-cloudfunctie te gebruiken om een ​​berichtverzoek naar een niet-google-server te sturen (van wat ik kan vinden moet ik op het blaze-plan zijn om te kunnen communiceren met niet-google-servers)

In principe wil ik POST naar een externe server die draait op een Arduino wanneer er een waarde wordt toegevoegd aan mijn database.

Ik heb de documenten bekeken en voorbeelden gevonden van het laten reageren van een cloudfunctie op een HTTP-postverzoek (HTTP-cloudfuncties), maar ik kan geen voorbeelden vinden van posten op een externe server. Is dit mogelijk?


Antwoord 1, autoriteit 100%

Opmerking: verzoekpakket is verouderd zoals vermeld op de npm-pagina verzoek -npm. Overweeg andere alternatieven te gebruiken, zoals axios

Dit kan gedaan worden met de requestmodule:

// import the module
var request = require('request');
// make the request
request('put your external url here', function (error, response, body) {
    if (!error && response.statusCode == 200) {
        //here put what you want to do with the request
    }
})

OPMERKING: dit werkt alleen bij betaalde abonnementen. Het is niet mogelijk om niet-Google API’s aan te roepen met het gratis Spark-abonnement, zoals uitgelegd op de Firebase-prijspagina:

Het Spark-abonnement staat alleen uitgaande netwerkverzoeken toe aan services die eigendom zijn van Google. Binnen het quotum zijn inkomende aanroepverzoeken toegestaan. Bij het Blaze-abonnement biedt Cloud Functions een eeuwigdurende gratis laag. De eerste 2.000.000 aanroepen, 400.000 GB-sec, 200.000 CPU-sec en 5 GB uitgaand internetverkeer worden elke maand gratis verstrekt. U betaalt alleen voor gebruik na deze gratis toewijzing. De prijs is gebaseerd op het totale aantal aanroepen en de rekentijd. De rekentijd is variabel op basis van de hoeveelheid geheugen en CPU die voor een functie is ingericht. Gebruikslimieten worden ook afgedwongen via dagelijkse quota en quota van 100 jaar. Zie Cloud Functions-prijzenvoor meer informatie.


Antwoord 2, autoriteit 12%

U moet het pakket installeren.
Ga naar de map Firebase-Funcions in Terminal en typ

npm install request

OF

npm install request-promise

Gebruik dit voorbeeld voor de test: https://www.npmjs.com/package/request


Antwoord 3, autoriteit 3%

Vergeet niet om de module in de functiemap te installeren!

cd functions
npm i --save request

Antwoord 4, autoriteit 3%

Voor degenen onder u die willen posten met een JSON-body, dit is hoe u het kunt doen. (Ik weet dat ik dit een tijdje geleden nodig had)

export function postWithBodyToExternalUrl(url: string, bdy: any): Promise<ReqResponse> {
  const request = require('request');
  const options = {
    url: url,
    json: true
  };
  return new Promise(function (resolve, reject) {
    request(options, function (err, resp) {
      if (err) {
        console.log(err);
        reject({ err: err });
      }
      resolve(bdy);
    });
  });
}

Antwoord 5, autoriteit 2%

axiosis ook een van de geweldige bibliotheken voor het afhandelen van netwerkoproepen. Enkele functies:

  • Maak XMLHttpRequests vanuit de browser
  • Doe http-verzoeken van node.js
  • Ondersteunt de Promise API
  • Verzoek en antwoord onderscheppen
  • Verzoek- en reactiegegevens transformeren
  • Verzoeken annuleren
  • Automatische transformaties voor JSON-gegevens
  • Klantzijde ondersteuning voor bescherming tegen XSRF
  • 67k+sterren op github
  • github-documentatie voor meer

Other episodes