当前位置: 首页 > 知识库问答 >
问题:

使用JS中的云函数将数据设置到Firestore

穆劲
2023-03-14

创建新用户后,我想向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,但我得到以下错误;

类型错误:firestoreDB。集合(…)。文档不是导出时的函数。createUser。功能。消防商店。文件在对象上创建(/user\u code/index.js:23:73)。(/user_code/node_modules/firebase functions/lib/cloud functions.js:112:27)在下一个(本地)at/user_code/node_modules/firebase functions/lib/cloud functions。js:28:71在cloudFunction(/user\u code/node\u modules/firebase functions/lib/cloud functions.js:24:12)在cloudFunction(/user\u code/node\u modules/firebase functions/lib/cloud functions.js:82:36)在/var/tmp/worker/worker。js:728:24在程序中_tickDomainCallback(内部/process/next_tick.js:135:7)

我是新来的JS

共有2个答案

杨良才
2023-03-14

以下是完整的工作代码:

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)
            })
        });
屠建本
2023-03-14

firestoreDB。集合(“用户”)返回一个CollectionReference对象。您试图调用名为document()的方法,但是从API文档中可以看到,没有这样的方法。我想您打算使用doc()来构建DocumentReference

    let notificationCollectionRef = firestoreDB.collection('Users').doc(userRef).collection('Notifications')
    let notificationDocumentRef = notificationCollectionRef.doc('first notification')
 类似资料:
  • 云功能文档说 //使用Firebase管理SDK访问Firebase实时数据库。const admin=require('firebase-admin');管理初始化EAPP(); 我使用的是Cloud Firesta,而不是实时数据库。我如何访问它?

  • danger 以下操作仅适用于 SDK version >= 1.3.0a,该版本还在内测阶段,仅面向受邀用户开放,详情请咨询客服 BaaS.invokeFunction(functionName, params, sync) 参数说明 参数 类型 必填 说每个 functionName String 是 云函数名 params Object 否 传递给云函数的参数 sync Bool 否 是否等

  • 我正在尝试部署GCP云功能 gcloud函数部署MyFunction--设置env vars EXPRESSPORT=0000,CODEENV=PRE--region=europe-west1--入口点MyPoint--运行时节点JS12--触发http--允许未经身份验证--入口设置=all--内存=256--超时=30 但我找不到可以在Web控制台中设置“必需的HTTPS”的标志: 有人知道说

  • 路径1-match_creator/cricket/matchlists;路径2-match_creator/cricket/completedmatchlists;我有一个名为matchList(路径1)的集合,其中有一个名为C434108的文档。现在我想把这个docc434108)移动到路径2; 复制此docc434108)之后,我想从路径1中删除此docc434108)。 我的index.j

  • 我遇到过一些不同寻常且有趣的技术,以及使用Spring云函数拆分业务和技术实现的方法,该函数支持java的实现。util。函数类充当endpoint 简而言之,有一个简单的静态列表 下面的Bean根据方法名称及其返回类型启用指定的endpoint: 问题: > 可以使用java中的一个或多个类来实现完全兼容REST的解决方案。util。功能组合?我只能写上面的那些。我对以下模式特别感兴趣: 如何避

  • 问题内容: 今天,我以前曾被教过如何在此答案中(。单击)在.NET中的SQL查询中设置参数。 使用带有值的参数很好,但是当我尝试将数据库中的字段设置为null时,我将失败。该方法认为我未设置有效参数或未指定参数。 例如 有什么我想念的吗?我做错了吗? 问题答案: 您需要DBNull .Value。 在共享的DAL代码中,我使用的辅助方法只是执行以下操作: