解析云代码之前保存未在更新时运行

Posted

技术标签:

【中文标题】解析云代码之前保存未在更新时运行【英文标题】:Parse Cloud Code beforeSave not running on update 【发布时间】:2014-10-20 03:24:16 【问题描述】:

我在下面为 beforeSave 定义了 Parse Cloud Code 函数。

Parse.Cloud.beforeSave(Parse.User, function(request, response) 
  Parse.Cloud.useMasterKey();

  var publicACL = new Parse.ACL();
  publicACL.setPublicReadAccess(true);
  publicACL.setPublicWriteAccess(true);

  request.object.setACL(publicACL);

  response.success();
);

每当我保存新的 Parse.User 时,此代码都会正确运行。但是,当我尝试更新预先存在的 Parse.User 时,代码不会执行。有什么想法吗?下面是我用来更新我的用户的代码。

函数 updateStudentTypes(id, studentType, chkBox)

var query = new Parse.Query(Parse.User);
query.get(id, 
  success: function(user) 
    var typeList = user.get("studentType");

    if(!chkBox.checked)
      typeList = removeStudentType(typeList, studentType);
    else
      typeList = addStudentType(typeList, studentType);

    user.set("studentType", typeList);
    user.save(null, 
      success: function(user) 
        //alert('New object created with objectId: ' + user.id);
      ,
      error: function(user, error) 
        alert('Failed to update user: ' + error.message);
      
    ); 

  ,
  error: function(object, error) 
    alert("Error querying user: " + error);
  
);

【问题讨论】:

【参考方案1】:

将此添加到 updateStudent 方法的开头:

Parse.Cloud.useMasterKey();

编辑:我认为您的代码是云代码,而不是客户端 javascript

【讨论】:

感谢您的评论。我试过这个,但它没有用。我的 updateUsers 方法通过 Javascript 在网页上运行,我得到一个 undefined is not a function 错误。 需要使用云代码查询用户。它不能在客户端完成 查询在客户端工作,没有问题。我只是不能“更新”用户对象。你是说我需要创建 Cloud Code 来“更新”用户对象,然后使用 useMasterKey() 函数? 抱歉,可能有误。这完全取决于您的 ACL 权限。您是要更改当前用户的数据还是其他用户的数据?默认情况下(根本没有设置 ACL)PFUser ACL 权限是 public:read 但不是 public:write 如果您正在尝试保存另一个用户,是的,您仍然可以通过创建云代码来使用 userMasterKey() 覆盖 ACL 来克服这个问题;功能。

以上是关于解析云代码之前保存未在更新时运行的主要内容,如果未能解决你的问题,请参考以下文章

解析云代码 request.object.get(key) 总是返回 undefined

解析服务器云代码 - 检查用户名

解析云代码全部保存

解析云代码保存关系

解析 iOS SDK + 云代码:如何更新用户

JSON数据未在swift3中使用Alamofire进行解析