【问题标题】:Firebase functions - remove parentFirebase 功能 - 删除父级
【发布时间】:2018-08-28 22:31:44
【问题描述】:

我不确定我这样做是否正确。

如果节点内的可变参数为真,我想删除节点的父节点..

这就是我所拥有的:

exports.removePost = functions.database
.ref('posts/{locationId}/{postId}/score')
.onUpdate(async snapshot => {

const score = snapshot.after.val();

if(score < -4)
  return false;
if(score >= -4)
  return snapshot.ref.parent().remove();

return false;
});

所以score 是一个整数,如果它等于或大于-4 onUpdate 我想删除父级,所以{postId}

我猜这是可能的。但是当我尝试部署上面的代码时,它说ref does not exist on type 'Change&lt;DataSnapshot&gt;'.

为什么这么说?

另外,作为一个附带问题 - 如果我设置 firebase 安全规则,以便只有具有与 postIduid 相同的 uid 的用户,上述代码仍然有效吗?

【问题讨论】:

    标签: javascript firebase firebase-realtime-database google-cloud-functions


    【解决方案1】:

    看起来您希望 onUpdate 处理函数的第一个参数是 DataSnapshot 对象,但事实并非如此。 onUpdateonWrite 处理函数的第一个参数是一个Change 对象,其中包含beforeafter 字段,描述了之前触发位置的数据库内容以及触发它的更改。这些字段是带有ref 字段的DataSnapshot 对象。

    如果您想要更改位置的 ref,请尝试以下操作:

    exports.removePost = functions.database
    .ref('posts/{locationId}/{postId}/score')
    .onUpdate(async change => {
    
        const score = change.after.val();
    
        if (score < -4) {
            return null;
        }
        else {
            return change.after.ref.parent.remove();
        }
    });
    

    【讨论】:

    • 感谢您的回答!我认为这会起作用,但我得到了一个错误:error TS2349: Cannot invoke an expression whose type lacks a call signature. Type 'Reference' has no compatible call signatures. 它指的是return change.. 行。有什么想法吗?
    • 其实parent是一个属性,而不是一个方法。已编辑。 firebase.google.com/docs/reference/admin/node/…
    • 嗯,不管score 是什么,它实际上都在删除帖子……你知道为什么吗? score 存储为变量,因此它应该可以工作,但事实并非如此。只要score 发生更改,它就会删除父级..
    • 记录score的值,看看它是否是你所期望的。
    • 对不起,这是我的错。我混淆了负值和大于,忘记了 -4 大于 -5 哈哈
    猜你喜欢
    • 2021-08-22
    • 2019-01-04
    • 2020-10-10
    • 2020-03-28
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多