我一直在尝试使用.onupdate((触发器推动通知,但它不起作用。我不确定有什么问题,因为我在文档上发现的任何东西几乎没有用,这是我第一次使用node.js。
我想使用Firebase Cloud函数更新任何产品(在Firebase实时数据库中(时通知用户(使用Firebase消息传递(,该功能是在提交订单后,并且要求是产品库存是< = 5。
该系列的结构就是这样:产品(收集( -> {propartid}(document( ->属性:{名称,条形码,价格,股票,出售}
//import firebase
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.sendNotification = functions.database.ref('/products/{product}')
.onUpdate((change, context) => {
const prodName = context.data.child('name');
const numProd = context.data.child('stock');
if(numProd<=5){
const payload = {
notification: {
title: 'Low stock!',
body: `Product ${prodName} is running out.`
}
}
const registrationToken = 'token';
return admin.messaging().sendToDevice(registrationToken,payload)
.then(function(response){
console.log('Notification sent successfully:',response);
return 1;
})
.catch(function(error){
console.log('Notification sent failed:',error);
});
}
});
显然您正在混合两个Firebase的数据库服务:Firestore和实时数据库。
事实上,您指出您的数据是在 collections 中组织的("收藏的结构是这样的:product意味着您正在使用firestore(实时数据库没有集合(。
但是您的背景触发器对应于实时数据库触发器,请参见https://firebase.google.com/docs/functions/database-events。
如果您要混合两个数据库服务的假设是正确的,则需要使用firestore的背景触发器,请参见https://firebase.google.com/docs/docs/functions/firestore-events,尤其是onUpdate()
一个,如下:
exports.updateUser = functions.firestore
.document('/products/{productId}')
.onUpdate((change, context) => {
// Get an object representing the document
const newValue = change.after.data();
const prodName = newValue.name;
const numProd = newValue.stock;
// ...
});
请注意,numProd > 5
时似乎没有正确处理这种情况。您可能会丢下错误,或者只是做return null;
观看Firebase视频系列中的" JavaScript承诺"的3个视频也是一个好主意:/div>