Parse.com云功能 - 在发送给客户端之前手动修改对象字段

时间:2014-07-25 15:57:06

标签: javascript parse-platform

我试图限制云功能中解析用户对象的某些字段的可见性。 我有一个"产品" class,带有一个名为&#34的指针; owner"到用户"上传了该项目。

我还有一个名为" getProducts"的云功能,我使用query.include(" owner")同时获取所有者数据。

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

搜索后,我看到了2种可能的解决方案。 1.)将User类切换为2个类,其中1个是" Private"只为用户使用ACL的类。 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("所有者",itemOwner)并不好,并且告诉我exepction: rror:Uncaught尝试使用指向未保存的新对象的指针保存对象。 (代码:141,版本:1.2.19)

我做错了什么?

1 个答案:

答案 0 :(得分:13)

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

解决这个问题的黑客方法是:

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

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

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