Обновление после комментария OP ниже: очевидно, использование подчеркивания в имени функции облака вызывает проблему .
С помощью триггера onWrite()
вы собираетесь инициировать событие для любого изменения определенного документа .Документы в Firestore хранятся в коллекциях , поэтому вам нужно передать полный путь к документу в метод document()
следующим образом:
exports.onFirestoreWriteNotifications = functions.firestore
.document('collection/_notifications') //Note the addition of the collection
.onWrite()
Кроме того, обратите внимание, что вам не нужно делать
const Firestore = require('@google-cloud/firestore');
const firestore = new Firestore();
, поскольку в облачных функциях вы будете использовать Admin SDK для Node.js для взаимодействия сFirestore.
Для этого достаточно
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
, как объяснено здесь и здесь (вкладка Node.js).
Затем вы будете вызывать базу данных Firestore с admin.firestore()
, например, admin.firestore().collection('_hello').add({...})
Кроме того, обратите внимание, что вы должны вернуть Обещания, возвращаемые асинхронными задачами.
Если я ссылаюсь на ваш исходный код (перед вашим редактированием)
exports._onFirestoreWrite_notifications = functions.firestore
.document('collection/_notifications')
.onWrite((change, context) => {
db.firestore//.collection('_hello').add({
text: "itworks",
from: "onWrite"
});
});
вам нужно сделать
return admin.firestore().collection('_hello').add({
text: "itworks",
from: "onWrite"
});
//!!! Note the return (and the use of admin.firestore() )
Это важный момент и очень хорошо объяснено в трех видео о "Обещаниях JavaScript" из серии видеороликов Firebase: https://firebase.google.com/docs/functions/video-series/