Closed
Description
beforeSave
success callback works differently for api.parse.com and parse-server.
Passing the object to success fails to update fields on parse-server but correctly updates fields on api.parse.com
This has been described in #1031, #866 already.
Steps to reproduce
Parse.Cloud.beforeSave('AClass', (request, response) => {
request.object.set('before', 'save');
response.success(request.object);
});
- Add BeforeSave hook like above
- Save an object
- Retrieve object
Expected Results
Retrieved object has fields set in before save missing
Actual Outcome
Retrieved object should have fields set in before save present
Environment Setup
- Server
- parse-server version: 2.2.10
- Operating System: Mac OSX 10.11.14
- Hardware: MBP x86-64
- Localhost or remote server? Localhost
- Database
- MongoDB version: 3.2.1
- Storage engine: Default
- Hardware: MBP x86-64
- Localhost or remote server? Localhost
Logs/Trace
The root cause is https://github.com/ParsePlatform/parse-server/blob/b2183680be18ffc6c5b90e2fc2260bede571c2b3/src/triggers.js#L133-L136
copied below:
success: function(response) {
// Use the JSON response
if (response && request.triggerName === Types.beforeSave) {
return resolve(response);
}
response = {};
if (request.triggerName === Types.beforeSave) {
response['object'] = request.object._getSaveJSON();
}
return resolve(response);
},
The first if breaks the code, and was added by @flovilmart in 9ac7a52 to support webhooks. Could we do something on the lines of:
if (response && !response.equals(request.object) &&
request.triggerName === Types.beforeSave) {
return resolve(response);
}
I can open this PR and write a couple of tests if this makes sense?
Metadata
Metadata
Assignees
Labels
No labels