【问题标题】:Parse.com cloud function - manually modify object fields before sending to clientParse.com 云功能 - 在发送到客户端之前手动修改对象字段
【发布时间】:2014-07-25 15:57:06
【问题描述】:

我正在尝试限制云函数中解析用户对象的某些字段的可见性。 我有一个“产品”类,带有一个名为“所有者”的指针,指向上传项目的“用户”。

我还有一个叫“getProducts”的云函数,我同时使用query.include(“owner”)来获取owner数据。

我想要实现的是,“getProduct”的输出将是一个产品列表,但“Owner”对象将仅包含某些字段,例如“firstName”或“facebookId”, 我不想将其他敏感数据返回给客户,即使我没有提供(例如位置、电子邮件、姓氏等)。

搜索后,我看到了 2 种可能的解决方案。 1.) 将 User 类分成 2 个类,其中 1 个是带有 ACL 的“Private”类,仅供用户使用。 2.)我更喜欢的第二种方法,我编辑云功能中的字段,但我似乎无法更改“产品”对象的“所有者”对象。我收到错误: “错误:未捕获尝试使用指向新的未保存对象的指针保存对象。(代码:141,版本:1.2.19)”

var output[] = [];
_.each(results, function(result) {
    var responseData = {};
    var owner = result.get("owner");

    //Remove fields from the user object
    var itemOwnerId = owner.id;
    var itemOwnerFirstName = owner.firstName;
    var itemOwnerFacebookID = owner.facebookID;
    var itemOwner = new Parse.User();
    itemOwner.id = itemOwnerId;
    itemOwner.id = itemOwnerId;
    itemOwner.firstName = itemOwnerFirstName;
    itemOwner.facebookID = itemOwnerFacebookID;
    result.set("owner", itemOwner);
    responseData.item = result;
    output.push(responseData);
});

似乎调用 result.set("owner", itemOwner) 不好,并抛出我 exepction: rror: Uncaught 尝试使用指向新的未保存对象的指针保存对象。 (代码:141,版本:1.2.19)

我做错了什么?

【问题讨论】:

    标签: javascript parse-platform


    【解决方案1】:

    SDK 不允许将已更改的对象序列化为响应。

    解决此问题的黑客方法是:

    result.dirty = function() { return false; };
    

    这将禁用检查并允许您返回修改后的对象。

    如果您想稍后重新启用它,您需要存储 result.dirty 的原始值并稍后重新分配它。

    【讨论】:

    • 优秀。完美运行。非常感谢。
    • 纯金!我的一天被拯救了。
    • 该死的,我一直在寻找 2 天的帖子!
    猜你喜欢
    • 2022-11-04
    • 2015-08-16
    • 2010-09-21
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    相关资源
    最近更新 更多