我目前正在尝试修改我的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
答案 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的工作完成的重要性。