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 метод, как обычно, и ваш код подтверждения пользователя будет работать.