Parse Server - облачный код до сохранения и после сохранения влияет друг на друга

В моем облачном коде parse-server у меня есть одна функция 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 {

          }

      }

    });


  });

2 ответа

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

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

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

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

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

Другие вопросы по тегам