首页 > 解决方案 > “ref.child 不是函数”

问题描述

我正在尝试实现一个简单的云功能,当一个新用户被添加到我的 /users 路径而没有任何默认值时,它会向该新用户添加一个默认对象结构。

如果在该用户名下没有指定子级,则该方法应该简单地返回。

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

    exports.defaultUser = functions.database.ref('/users/{any}')
        .onCreate((snapshot, context) => {

            var ref = functions.database.ref('/users');
            ref.child('%s', snapshot.key).once('value', function 
    (snapshot) {
                var exists = (snapshot.val() !== null);
                if (!exists) return;
            });

            const userObj = {
                name: "default",
                mail: "default",
                pwd: "default",
                token: "default",
                groups: {},
                plants: {},
                points: 0
            }

            return snapshot.ref.child.set(userObj);
        });

这将在函数日志中返回“ref.child 不是函数”。

我对 javascript 和 firebase 很陌生,所以对于有经验的人来说,这一定很令人困惑。

标签: node.jsfirebase-realtime-databasegoogle-cloud-functionsfirebase-admin

解决方案


您正在寻找:

snapshot.ref.set(userObj);

或者:

snapshot.ref.child("somekey").set(userObj);

另请注意,您将希望使用事务来防止在用户写入数据时覆盖数据的竞争条件。


推荐阅读