0

在我的解析服务器云代码中,我有一个 beforeSave 和一个 afterSave 函数。beforeSave 是关于“哪个用户进行保存”到“post”表的验证。当评论保存到“comments”表时,afterSave 函数会更新“post”表中的对象。然而,“result[0].save(null, { useMasterKey: true });” 部分再次启动beforeSave功能,由于云端正在保存且没有用户,由于“beforeSave”部分中的用户验证,无法进行保存。这有点复杂,希望我能解释清楚,当从云端完成保存时,有没有办法绕过 beforeSave 方法?

  Parse.Cloud.beforeSave('post', function (req, res) {




  });




  Parse.Cloud.afterSave('comment', function(req) {


    var post = Parse.Object.extend('post');
    var query = new Parse.Query(post);
    query.equalTo('userid', req.user.id);
    query.find({

      success: function(result) {

          if ( result.length > 0 ) {


              result[0].set('commented', 'yes');
              result[0].save(null, { useMasterKey: true });

          }

          else {

          }

      }

    });


  });
4

2 回答 2

1

问题实际上是如果请求是由用户而不是云代码发送的,我希望 beforeSave 处于活动状态。我解决了直接使用if (req.master)which会成功,否则如果请求是由用户完成的,则执行afterSave中的代码。

于 2016-03-08T12:35:14.660 回答
0

首先,你最后一个问题的答案是否定的。无法跳过 beforeSave 触发器。保存对象时始终会调用它。

在您的情况下,最好的选择可能是以以下方式保存帖子,而不是使用主密钥:

result[0].save(null, {sessionToken: req.user.getSessionToken()});

这将req.user像往常一样在 post beforeSave 方法中填充对象,并且您的用户验证码将起作用。

于 2016-03-04T18:24:12.120 回答