0

私のスクリプトはNodeJSでFirebaseに接続し、Firebaseデータベースをチェックし、データベースからの結果が真の場合に通知を送信します...しかし、ローカルマシンから実行すると動作します。 Firebaseにデプロイしても動作しません。誰か助言してもらえますか?ありがとうございました。NodeJSスクリプトはローカルマシンで実行されますが、Firebase Cloud機能では実行されませんか?

私は初心者だが、私は答えを見つけようとして時間今夜を費やしているので...ここ

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 

を上尋ねる嫌い、私は輸出を削除します。 CheckDatesはローカルで実行したときに表示されますが、Firebaseのコンソールにエクスポートがなければ表示されませんでした。ローカルとFirebaseコンソール上で警告を返しますが、それは他のものではなく動作します。

+0

私は初心者ですからここで質問して嫌いですなんですか? –

答えて

0

この質問は無視してください。このスクリプトは、通知が最後に送信された日付をデータベースのアイテムの「リマインド」キーに追加します。これにより、同じことについて毎日通知が行われなくなります。

ローカルマシンで実行されましたそれが仕事だったのですが、なぜそれが再び動かないのか理解できませんでした...まあ、ハ!少なくとも私たちはその一部の作品を知っています。

関連する問題