使用JS中的云功能将数据设置为Firestore

时间:2018-07-15 09:13:53

标签: node.js firebase google-cloud-firestore google-cloud-functions

创建新用户后,我想将数据添加到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不是函数     在exports.createUser.functions.firestore.document.onCreate(/user_code/index.js:23:73)     在对象。 (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:112:27)     在下(本机)     在/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     在process._tickDomainCallback(internal / process / next_tick.js:135:7)

我是JS&Functions的新手。一如既往,任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

firestoreDB.collection('Users')返回一个CollectionReference对象。您正在尝试在名为document()的方法上调用方法,但是正如从API文档中可以看到的那样,没有这样的方法。我想您打算使用doc()来构建DocumentReference

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

答案 1 :(得分:2)

这是完整的工作代码:

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)
            })
        });