Я пытаюсь сравнить новый объект с оригиналом, используя функцию CloudCode beforeSave. Мне нужно сравнить поле, отправленное в update, с существующим значением. Проблема в том, что я не могу правильно получить объект. Когда я запускаю запрос, я всегда получаю значение из отправленного объекта.
ОБНОВЛЕНИЕ: я попробовал другой подход и смог получить старый регистр (тот, который уже сохранен в разборе). Но новый, отправленный в запросе, был заменен старым. КАКИЕ?! Другая проблема заключается в том, что даже несмотря на то, что код отправил response.success()
, обновление не было сохранено. Я полагаю, что здесь не хватает чего-то довольно очевидного. Или я столкнулся с ошибкой или что-то в этом роде...
НОВЫЙ ПОДХОД
Parse.Cloud.beforeSave('Tasks', function(request, response) {
if ( !request.object.isNew() )
{
var Task = Parse.Object.extend("Tasks");
var newTask = request.object;
var oldTask = new Task();
oldTask.set("objectId", request.object.id);
oldTask.fetch()
.then( function( oldTask )
{
console.log(">>>>>> Old Task: " + oldTask.get("name") + " version: " + oldTask.get("version"));
console.log("<<<<<< New Task: " + newTask.get("name") + " version: " + newTask.get("version"));
response.success();
}, function( error ) {
response.error( error.message );
}
);
}
});
ОБЪЕКТ ОТПРАВЛЕН {"name":"LLL", "version":333}
ЖУРНАЛ
I2015-10-02T22:04:07.778Z]v175 before_save triggered for Tasks for user tAQf1nCWuz:
Input: {"original":{"createdAt":"2015-10-02T17:47:34.143Z","name":"GGG","objectId":"VlJdk34b2A","updatedAt":"2015-10-02T21:57:37.765Z","version":111},"update":{"name":"LLL","version":333}}
Result: Update changed to {}
I2015-10-02T22:04:07.969Z]>>>>>> Old Task: GGG version: 111
I2015-10-02T22:04:07.970Z]<<<<<< New Task: GGG version: 111
ПРИМЕЧАНИЕ. Я тестирую вход через cURL и в консоли синтаксического анализа.
CloudCode перед сохранением
Parse.Cloud.beforeSave("Tasks", function( request, response) {
var query = new Parse.Query("Tasks");
query.get(request.object.id)
.then(function (oldObj) {
console.log("-------- OLD Task: " + oldObj.get("name") + " v: " + oldObj.get("version"));
console.log("-------- NEW Task: " + request.object.get("name") + " v: " + request.object.get("version"));
}).then(function () {
response.success();
}, function ( error) {
response.error(error.message);
}
);
});
запрос cURL
curl -X PUT \
-H "Content-Type: application/json" \
-H "X-Parse-Application-Id: xxxxx" \
-H "X-Parse-REST-API-Key: xxxxx" \
-H "X-Parse-Session-Token: xxxx" \
-d "{\"name\":\"NEW_VALUE\", \"version\":9999}" \
https://api.parse.com/1/classes/Tasks/VlJdk34b2A
Ответ JSON
"updatedAt": "2015-10-02T19:45:47.104Z"
ЖУРНАЛ В журнале печатается исходное и новое значение, но я также не знаю, как получить к нему доступ.
I2015-10-02T19:57:08.603Z]v160 before_save triggered for Tasks for user tAQf1nCWuz:
Input: {"original":{"createdAt":"2015-10-02T17:47:34.143Z","name":"OLD_VALUE","objectId":"VlJdk34b2A","updatedAt":"2015-10-02T19:45:47.104Z","version":0},"update":{"name":"NEW_VALUE","version":9999}}
Result: Update changed to {"name":"NEW_VALUE","version":9999}
I2015-10-02T19:57:08.901Z]-------- OLD Task: NEW_VALUE v: 9999
I2015-10-02T19:57:08.902Z]-------- NEW Task: NEW_VALUE v: 9999