如何修复Cloud Function错误admin.database.ref在导出时不起作用

时间:2019-03-26 13:41:24

标签: javascript node.js firebase firebase-realtime-database google-cloud-functions

我目前正在尝试修改我的Cloud Functions并移至try { window.Popper = require('popper.js').default; window.$ = window.jQuery = require('jquery'); require('bootstrap'); } catch (e) {} 下,以便我可以调用它来计划cron作业。我如何在日志中收到以下错误。

  
    

TypeError:admin.database.ref不是一个函数         在exports.scheduleSendNotificationMessageJob.functions.https.onRequest(/user_code/index.js:30:20)         在cloudFunction(/user_code/node_modules/firebase-functions/lib/providers/https.js:57:9)

  
https.onRequest

1 个答案:

答案 0 :(得分:3)

您不能在HTTP云功能的定义内内使用onCreate()实时数据库触发器的定义。

如果您切换到HTTP云功能“以便(您)可以调用它来计划cron作业”,则意味着触发器将对HTTP云功能的调用。换句话说,在实时数据库中创建新数据时,您将不再能够触发操作(或云功能)。

您可以做的很好,例如读取实时数据库的数据,例如(发送通知的简化方案):

exports.scheduleSendNotificationMessageJob = functions.https.onRequest((req, res) => {

    //get the desired values from the request
    const studentId = req.body.studentId;
    const notificationCode = req.body.notificationCode;

    //Read data with the once() method
    admin.database.ref('/notifications/' + studentId + '/notifications/' + notificationCode)
     .once('value')
     .then(snapshot => {
         //Here just an example on how you would get the desired values
         //for your notification
         const theToken = snapshot.val();
         const theMessage = ....
         //......

         // return the promise returned by the sendToDevice() asynchronous task
         return admin.messaging().sendToDevice(theToken, theMessage, options)
      })
      .then(() => {
         //And then send back the result (see video referred to below)
         res.send("{ result : 'message sent'}") ;
      })
      .catch(err => {
         //........
      });

});

您可能会观看以下有关HTTP Cloud Functions的Firebase官方视频:https://www.youtube.com/watch?v=7IkUgCLr5oA&t=1s&list=PLl-K7zZEsYLkPZHe41m4jfAxUi0JjLgSM&index=3。它显示了如何从Firestore读取数据,但对于实时数据库,读取和发送回响应(或错误)的概念是相同的。连同该系列的其他2个视频(https://firebase.google.com/docs/functions/video-series/?authuser=0)一起,它还说明了正确链接承诺并向平台指示Cloud Function的工作完成的重要性。