gpt4 book ai didi

javascript - 如何修复云函数错误 admin.database.ref 不是导出时的函数

转载 作者:太空宇宙 更新时间:2023-11-04 03:16:43 25 4
gpt4 key购买 nike

我目前正在尝试修改我的 Cloud Functions 并移至 https.onRequest 下这样我就可以调用它来安排 cron 作业。我如何在日志中收到以下错误。

TypeError: admin.database.ref is not a function at exports.scheduleSendNotificationMessageJob.functions.https.onRequest (/user_code/index.js:30:20) at cloudFunction (/user_code/node_modules/firebase-functions/lib/providers/https.js:57:9)

exports.scheduleSendNotificationMessageJob = functions.https.onRequest((req, res) => {
admin.database.ref('/notifications/{studentId}/notifications/{notificationCode}')
.onCreate((dataSnapshot, context) => {
const dbPath = '/notifications/' + context.params.pHumanId + '/fcmCode';
const promise = admin.database().ref(dbPath).once('value').then(function(tokenSnapshot) {
const theToken = tokenSnapshot.val();
res.status(200).send(theToken);
const notificationCode = context.params.pNotificationCode;
const messageData = {notificationCode: notificationCode};
const theMessage = { data: messageData,
notification: { title: 'You have a new job reminder' }
};
const options = { contentAvailable: true,
collapseKey: notificationCode };
const notificationPath = '/notifications/' + context.params.pHumanId + '/notifications/' + notificationCode;
admin.database().ref(notificationPath).remove();
return admin.messaging().sendToDevice(theToken, theMessage, options);
});
return null;
});
});

最佳答案

您不能在 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 ) 一起,它还解释了正确链接 promise 并向平台表明云功能的工作已完成的重要性。

关于javascript - 如何修复云函数错误 admin.database.ref 不是导出时的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55358616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com