3

Ich versuche eine Anfrage an mein Cloud-Endpunkt-Projekt zu stellen, wenn ein bestimmter Wert in die Firebase-Datenbank geschrieben wird. Ich kann kein Beispiel finden, wie eine Anfrage an Endpoints in Node.js durchgeführt wird. Hier ist, was ich komme mit so weit:Cloud-Funktionen für Firebase: Wie stelle ich eine Anfrage an meinen Cloud-Endpunkt?

"use strict"; 
const functions = require('firebase-functions'); 
const admin = require('firebase-admin'); 
const gapi = require('googleapis'); 

admin.initializeApp(functions.config().firebase); 

exports.doCalc = functions.database.ref('/users/{uid}/calc').onWrite(event => { 
    return gapi.client.init({ 
      'apiKey': 'AIzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 
      'clientId': '1234567890-xxx.apps.googleusercontent.com', 
      'scope': 'donno what to put here' 
     }).then(function() { 
      return gapi.client.request({ 
       'path': 'https://myproj.appspot.com/_ah/api/myApi/v1', 
       'params': {'query': 'startCalc', uid: event.params.uid } 
      }) 
     }).then(function(response) { 
      console.log(response.result); 
     }, function(reason) { 
      console.log('Error: ' + reason.result.error.message); 
     }); 
}); 

Beim Auslösen Funktionen Log-Tüllen: TypeError: Cannot read property 'init' of undefined. erkennt nicht einmal gapi.client.

Zuerst, was ist das richtige Paket für diese Anfrage zu verwenden? googleapis? Anfrage-Versprechen?

Zweitens, richte ich den richtigen Pfad und Parameter für einen Anruf an einen Endpunkt ein? Angenommen, die Endpunktfunktion ist startCalc(int uid).

Antwort

5

aktualisieren

Es scheint, dass Cloud-Funktionen für die Firebase blockieren Anforderungen an ihre App Engine Service - zumindest auf dem Spark-Programm (auch wenn sie beide im Besitz von Google - so können Sie davon ausgehen, würden "on the same network "). Die unten angegebene Anforderung funktioniert auf einem lokalen Computer, auf dem Node.js ausgeführt wird, schlägt aber auf dem Funktionsserver mit einem getaddrinfo EAI_AGAIN Fehler fehl, wie beschrieben here. Offensichtlich ist es nicht considered Zugriff auf Google API, wenn Sie eine Anfrage an Ihren Server in Google App Engine ausführen.

Kann nicht erklären, warum Firebase-Befürworter hier diese Frage wie vom Feuer vermeiden.

Original-Antwort

figured it out - geschaltet 'request-Versprechen' Bibliothek:

"use strict"; 
const functions = require('firebase-functions'); 
const request = require('request-promise'); 
const admin = require('firebase-admin'); 

admin.initializeApp(functions.config().firebase); 

exports.doCalc = functions.database.ref('/users/{uid}/calc').onWrite(event => { 
    return request({ 
     url: `https://myproj.appspot.com/_ah/api/myApi/v1/startCalc/${event.params.uid}`, 
     method: 'POST' 
    }).then(function(resp) { 
     console.log(resp); 
    }).catch(function(error) { 
     console.log(error.message); 
    }); 
}); 
+0

Danke, ich dies fand eine unglaublich hilfreiche Antwort. Ich bin auf dem Firebase Blaze-Plan und meine Anfrage ging mit dem von dir vorgeschlagenen Code durch. – CKP78

Verwandte Themen