【问题标题】:Parse Server - Cloud Code beforeSave and afterSave effect each otherParse Server - 云代码 beforeSave 和 afterSave 相互影响
【发布时间】:2016-03-03 19:21:23
【问题描述】:

在我的解析服务器云代码中,我有一个 beforeSave 和一个 afterSave 函数。 beforeSave 是关于“哪个用户进行保存”到“post”表的验证。当评论保存到“cmets”表时,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 {

          }

      }

    });


  });

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多