首页 > 解决方案 > Firebase Cloud Function 使用不正确的值更新 ref

问题描述

如果节点不存在,我想向数据库添加一个新节点。我不想向客户端返回任何东西,我只想用新值更新数据库。在客户端上,我有一个监听器来观察credit_counts属性,一旦发生更新,它就会在那里接收它并通知所有用户这个特定用户有一个新的信用。

在下面的代码中,我检查以查看if (!snapshot.exists(),如果不存在,我使用admin.database().ref('/user_credits/{creditId}/{userId}').set({ dict });. 粘贴网址后,我检查数据库,布局为:

在此处输入图像描述

我是一名 Swift 开发人员。在 Swift 中,我可以这样做:

Database.database().reference().child("/user_credits/\(creditId)/\(userId)").setValue(dict) and the tree will be correct.

user_credits > {creditId} > {userId} > dict不正确。应该是user_credits > sample_123 > user_xyz > dict values。我哪里错了?

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

exports.updateViewsCtAtPostsRef = functions.https.onRequest((request, response) => {

    const currentTimeStamp = Date.now();
    const receivedTimeStamp = admin.database.ServerValue.TIMESTAMP;

    const creditId = "sample_123";
    const userId = "userId_xyz";

    admin.database().ref('user_credits').child(creditId).child(userId).once('value', snapshot => {

        if (!snapshot.exists()) {

            var dict = {
                "joined_date": receivedTimeStamp,
                "timeStamp": receivedTimeStamp,
                "credits_count": 1
            };

            return admin.database().ref('/user_credits/{creditId}/{userId}').set({ dict });

        } else {

            const previousTimeStamp = snapshot.child("timeStamp").val();
            const creditsCount = snapshot.child("credits_count").val();

            if (previousTimeStamp + whatever) < currentTimeStamp {

                let updatedCount = creditsCount + 1

                return admin.database().ref('/user_credits/{creditId}/{userId}').update({ "timeStamp": receivedTimeStamp, "credits_count": updatedCount });

            } else {

               return true
            }
        }
    });
});

标签: javascriptfirebase-realtime-databasegoogle-cloud-functions

解决方案


我不得不将 ref 更改为:

return admin.database().ref('/user_credits/' + creditId + '/' + userId).set({ "joined_date": receivedTimeStamp, "timeStamp": receivedTimeStamp, "credits_count": 1 });

我还必须更新 else 语句中的 ref 以遵循相同的格式。


推荐阅读