Установка данных в Firestore с помощью облачных функций в JS

99
12

После создания нового пользователя я хотел бы добавить данные в новую коллекцию в Firestore.

У меня есть мои функции как таковые;

exports.createUser = functions.firestore.document('Users/{userId}')
.onCreate((snap, context) => {
const newValue = snap.data();
if (snap.data() === null) return null;
const userRef = context.params.userId
console.log("create user found " + (userRef))
let notificationCollectionRef = firestoreDB.collection('Users').document(userRef).collection('Notifications')
let notificationDocumentRef = notificationCollectionRef.document('first notification')
return notificationDocumentRef.set({
notifications: "here is the notificiation"
}, {merge: true});
});

При запуске функции я получаю консольный журнал правильно распечатывать userId, но я получаю следующую ошибку;

TypeError: firestoreDB.collection(...). Document не является функцией export.createUser.functions.firestore.document.onCreate(/user_code/index.js:23:73) в Object. (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:112:27) в следующем (native) в /user_code/node_modules/firebase-functions/lib/cloud-functions.js:28:71 в __awaiter (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:24:12) в cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:82:36) в /var/tmp/worker/worker.js: 728: 24 at process._tickDomainCallback (internal/process/next_tick.js: 135: 7)

Я новичок в JS & Functions. Как всегда, любая помощь очень ценится.

спросил(а) 2018-07-15T12:13:00+03:00 2 года, 2 месяца назад
1
Решение
59

firestoreDB.collection('Users') возвращает объект CollectionReference. Вы пытаетесь вызвать метод для этого вызываемого document(), но, как вы можете видеть из документов API, такого метода нет. Я предполагаю, что вы намерены использовать doc() вместо этого для создания DocumentReference.

    let notificationCollectionRef = firestoreDB.collection('Users').doc(userRef).collection('Notifications')
let notificationDocumentRef = notificationCollectionRef.doc('first notification')

ответил(а) 2018-07-15T20:19:00+03:00 2 года, 2 месяца назад
41

Вот полный рабочий код:


const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firestore);

const firestoreDB = admin.firestore()

// Create and Deploy Your First Cloud Functions
// https://firebase.google.com/docs/functions/write-firebase-functions

exports.helloWorld = functions.https.onRequest((request, response) => {
response.send("Hello from Firebase Cloud Functions!");
console.log("function triggered")
});

exports.createUser = functions.firestore.document('Users/{userId}')
.onCreate((snap, context) => {
const newValue = snap.data();
if (snap.data() === null) return null;
const uid = context.params.userId
let notificationCollectionRef = firestoreDB.collection('Users').doc(uid).collection('Notifications')
return notificationCollectionRef.add({
notification: 'Hello Notification',
notificationType: 'Welcome'
}).then(ref => {
return console.log('notification successful', ref.id)
})
});

ответил(а) 2018-07-15T20:39:00+03:00 2 года, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема