Firebase函数将错误的密钥写入Firebase数据库

时间:2018-12-28 16:11:41

标签: javascript node.js firebase firebase-realtime-database google-cloud-functions

我具有云功能,可以直接在应用程序中调用它。

我的代码:

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

exports.sharePost = functions.https.onCall((data, context) => {
  var postkey = data.text;
  const uid = data.uid;

  var list= [];

  var db = admin.database();

var ref = db.ref("users").child(uid).child("followers");
  ref.once('value', function(snapshot) {
  snapshot.forEach(function(childSnapshot) {
    var childKey = childSnapshot.key;
    list.push(childKey);
  });
  var refsave = db.ref("posts");

  for (var i = 0; i < list.length; i++) {
    refsave.child(list[i]).update({
      postkey:""
    });
  }

});

});

我用以下代码调用此函数:

private Task<String> sharePost(String text) {
        Map<String, String> data = new HashMap<>();
        data.put("text", text);
        data.put("uid",auth.getUid());

        return mFunctions
                .getHttpsCallable("sharePost")
                .call(data)
                .continueWith(new Continuation<HttpsCallableResult, String>() {
                    @Override
                    public String then(@NonNull Task<HttpsCallableResult> task) throws Exception {
                        String result = (String) task.getResult().getData();
                        return result;
                    }
                });
    }

我在此任务中放置了键(-LUpD2kWvUct5KiihU4M之类的东西),我想写的是该键,但要用那个函数名而不是用变量名写数据。

此图像更好地说明了我想要的东西

enter image description here

1 个答案:

答案 0 :(得分:1)

由于要更新多个值,因此可以创建更新对象并一次将其全部写入。

更新也不同于set()。更新对象键是要更新的路径,值将写入该路径。同样,该路径是相对于您将在其上呼叫update()的孩子的。

像这样更新您的firebase函数:

var ref = db.ref("users").child(uid).child("followers");
ref.once('value', function (snapshot) {
    let update={};
    snapshot.forEach(function (childSnapshot) {
        var childKey = childSnapshot.key;
        update[`${childKey}/${postkey}`]="THE VALUE YOU WILL STORE"
    });
    var refsave = db.ref("posts");

    return refsave.update(update);

});

有关admin sdk中更新如何工作的更多详细信息,请参阅文档。 https://firebase.google.com/docs/reference/admin/node/admin.database.Reference#update