0

Mein in NodeJS geschriebenes Skript stellt eine Verbindung zu Firebase her, überprüft meine Firebase-Datenbank und sendet sogar erfolgreich Benachrichtigungen, wenn die Ergebnisse meiner Datenbank wahr sind ... Es funktioniert jedoch nur, wenn ich es von meinem lokalen Rechner aus starte. Ich stelle es in Firebase bereit und es wird nicht funktionieren. Könnte jemand bitte beraten? Vielen Dank.NodeJS-Skript wird auf lokaler Maschine, aber nicht in Firebase Cloud-Funktionen ausgeführt?

Ich hasse fragen hier, weil ich ein Neuling bin, aber ich habe Stunden heute Abend damit verbracht, eine Antwort zu finden ...

INDEX.JS

// Firebase Functions 
const functions = require('firebase-functions'); 
var admin = require("firebase-admin"); 

// Default admin firebase configuration 
admin.initializeApp(functions.config().firebase); 

// var serviceAccount = require("xxxxxx-80xxxxd-firebase-adminsdk- xxxxxxx.json"); 
var moment = require('moment'); 
var FCM = require('fcm-push'); 
var dateTime = require('node-datetime'); 

var serverKey = 'xxxxxxxxxxxxxpSELZBjQYwpZgmxxxxxxxxxxx'; 
var fcm = new FCM(serverKey); 


//Initial function call: 
exports.CheckDates = functions.https.onRequest((req, response) => { 

// Get a database reference to our posts 
var db = admin.database(); 
var ref = db.ref("records"); 
var userToken = ''; 
var itemExpires = ''; 
var itemName = ''; 
var reminded = ''; 
var itemCount = 0; 
var counter = 1; 
var itemFoundCount = 0; 
var dt = dateTime.create(); 
var formatted = dt.format('m-d-Y'); 

ref.once("value", function (recordsSnapshot) { 
recordsSnapshot.forEach(function (recordsSnapshot) { 
    var mainKey = recordsSnapshot.key; 
    recordsSnapshot.forEach(function (child) { 
     var key = child.key; 
     var value = child.val(); 
     if (key == 'Account') { 
      userToken = value.userToken; 
     } 
     if (key == 'Items') { 
      recordsSnapshot.child("Items").forEach(function (itemsSnapshot) { 
       counter++; 
       if (itemFoundCount === 0) { 
        itemFoundCount = itemsSnapshot.numChildren(); 
       } 
       var itemsChildkey = itemsSnapshot.key; 
       var itemsChildvalue = itemsSnapshot.val(); 
       itemExpires = itemsChildvalue.itemExpires; 
       itemName = itemsChildvalue.itemName; 
       reminded = itemsChildvalue.reminded; 
       moment().format('YYYY-MM-DD'); 
       var currentDate = moment(); 
       var otherTime = moment(reminded); 
       if (typeof reminded !== 'undefined') { 
        if (currentDate.diff(otherTime, 'days') >= 30) { 
         if (currentDate.diff(itemExpires, 'days') <= 90) { 
          itemCount++; 
          console.log("Expire date is less than " + 
     currentDate + " by 90 days = " + (currentDate.diff(otherTime, 'days') <= 
    90)); 
         db.ref("records/" + mainKey + "/Items/" + 
     itemsChildkey + '/reminded').set(formatted); 
        } 
       } 
      } else { 
       itemCount++; 
       db.ref("records/" + mainKey + "/Items/" + itemsChildkey + 
     `enter code here`'/reminded').set(formatted); 
      } 
      if (counter == itemFoundCount && itemCount > 0) { 
       console.log(itemFoundCount); 
       var message = { 
        to: userToken, // required fill with device token or 
     topics 
        notification: { 
         title: 'Item Expire Notification', 
         body: itemCount + ' is about to expire.' 
        } 
       }; 
       //callback style 
       fcm.send(message, function (err, response) { 
        if (err) { 
         console.log("Something has gone wrong!"); 
        } else { 
         console.log("Successfully sent with response: ", 
     response); 
        } 
       }); 
       itemCount = 0; 
       itemFoundCount = 0; 
       counter = 1; 
      } 
     }); 
    } 
}); 
}); 
}); 

response.send(200, "ok"); 
}) // END exports.CheckDates 

Offensichtlich entferne ich die Exporte. CheckDates Zeilen, wenn ich es lokal ausführe, aber es wurde überhaupt nicht ohne die Exporte auf der Firebase-Konsole angezeigt. Es gibt Warnungen lokal und auf der Firebase-Konsole zurück, aber es funktioniert auf der einen und nicht auf der anderen.

+0

Ich hasse es, hier zu fragen, weil ich ein Neuling bin Was ist das? –

Antwort

0

Bitte ignorieren Sie diese Frage. Das Skript fügt das Datum hinzu, an dem das letzte Mal eine Benachrichtigung an den "Reminded" Schlüssel in der Datenbank gesendet wurde ... das verhindert, dass Benachrichtigungen jeden Tag für dasselbe ausgehen.

Es lief auf meinem lokalen Rechner , und es hat seinen Job gemacht, aber ich konnte nicht herausfinden, warum es nicht wieder laufen würde ... nun, ha! Wenigstens wissen wir, dass dieser Teil funktioniert.

Verwandte Themen