Parse Server — облачный код beforeSave и afterSave влияют друг на друга

В моем облачном коде сервера синтаксического анализа у меня есть одна функция beforeSave и одна функция afterSave. BeforeSave — это проверка того, «какой пользователь делает сохранение» в таблицу «post». Функция afterSave обновляет объект в таблице «post», когда комментарий сохраняется в таблице «comments». Однако "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 {

          }

      }

    });


  });

person saner    schedule 03.03.2016    source источник


Ответы (2)


На самом деле проблема заключалась в том, что я хотел, чтобы функция beforeSave была активной, если запрос отправляется пользователем, а не облачным кодом. Я решил это, используя if (req.master), который напрямую приведет к успеху, иначе, если запрос выполняется пользователем, реализуются коды в afterSave.

person saner    schedule 08.03.2016

Во-первых, ответ на ваш последний вопрос - нет. Невозможно пропустить триггер beforeSave. Он всегда будет вызываться при сохранении объекта.

Лучший вариант в вашем случае, вероятно, сохранить пост следующим образом вместо использования мастер-ключа:

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

Это заполнит объект req.user в методе post beforeSave как обычно, и ваш код проверки пользователя будет работать.

person Simon Bengtsson    schedule 04.03.2016