解析服务器 - 云代码beforeSave和afterSave相互影响

时间:2016-03-03 19:21:24

标签: javascript cloud-code before-save parse-server after-save

在我的解析服务器云代码中,我有一个beforeSave和一个afterSave函数。 beforeSave是关于"用户进行保存的验证"到"帖子"表。 afterSave函数在" post"中提升对象。将评论保存到"评论"表。但是,"结果[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 {

          }

      }

    });


  });

2 个答案:

答案 0 :(得分:0)

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

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

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

这会正常填充post {保存方法中的req.user对象,并且您的用户验证码也能正常运行。

答案 1 :(得分:0)

问题实际上是,如果请求是由用户发送的,而不是由云代码发送,我希望beforeSave处于活动状态。我使用Item2解决了这个问题,这将直接导致成功,否则,如果请求由用户完成,则会实现afterSave中的代码。