0

NodeJS로 작성된 스크립트는 파이어베이스에 연결하고, 파이어베이스 데이터베이스를 검사하며, 데이터베이스 결과가 참일 때 알림을 성공적으로 보냅니다 ... 그러나 로컬 시스템에서 실행할 때만 작동합니다. Firebase에 배포하면 작동하지 않습니다. 누군가 조언 해 줄 수 있습니까? 고맙습니다.NodeJS 스크립트는 로컬 머신에서 실행되지만 Firebase Cloud 기능에서는 실행되지 않습니까?

내가 초보자이기 때문에 여기에 물어 싫어하지만 난 대답을 찾으려고 시간 오늘 밤을 보냈다는 ...

// 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 

하는 index.js

는 분명히, 나는 수출을 제거합니다. CheckDates는 로컬에서 실행할 때 줄을 표시하지만 Firebase 콘솔에서 내보내기를 수행하지 않으면 표시되지 않습니다. 로컬과 Firebase 콘솔에 경고를 보내지 만 다른 콘솔에서는 작동하지 않습니다.

+0

나는 초보자이기 때문에 여기에서 묻는 것이 싫다. 무엇입니까? –

답변

0

이 질문을 무시하십시오. 스크립트는 알림이 마지막으로 데이터베이스의 항목 "알림"키에 전송 된 날짜를 추가합니다. 이렇게하면 알림이 같은 일에 대해 매일 나가는 것을 방지합니다.

로컬 컴퓨터에서 실행되었습니다. , 그리고 그것은 직업이었다. 그러나 나는 그것이 다시 달리지 않을 것 인 이유를 이해할 수 없었다. .. 잘, 하아! 적어도 우리는 그 부분이 작동한다는 것을 압니다.