Skip to content

beforeSave success callback works differently for api.parse.com and parse-server #1928

Closed
@codebreach

Description

@codebreach

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);
});
  1. Add BeforeSave hook like above
  2. Save an object
  3. 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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions