Search code examples
javascriptparse-platformparse-cloud-codebefore-save

Parse.com discern update or insert in BeforeSave


I'm overriding the BeforeSave in CloudCode for Parse.com. This is what I see in the logs:

Input: {"original":null,"update":{"password":"5428","phone_number":"56858","ACL":{"T1pXElsPPT":{"read":true,"write":true}},"config":"{}","creator":"T1pXElsPPT","name":"quarta prova"}}
Result: Update changed to {"config":"{}","creator":"T1pXElsPPT","name":"quarta prova","password":"5428","phone_number":"56858","ACL":{"T1pXElsPPT":{"read":true,"write":true}}}

I need to check the BeforeSave only if the user is creating a new object, not when he's updating an old one. This is what I've done so far:

Parse.Cloud.beforeSave("tracker", function(request, response) {
var spaces = availableSpace(request.user.id);
if (request.original != undefined && request.original === null) {
    if (spaces == 0) {
        response.error("No available spaces");
    } else if (spaces >= 1) {
        response.success();
    } else if (spaces < 0) {
        response.error("Lookup error");
    }
} else {
    response.success();
}

});

But it seems that original is not in the request object (so it's undefined, always leading to a response.success();)

Is there a way to check for original or another way to check if this is an insert or an update?


Solution

  • You can use Parse.Object.isNew()

    Parse.Cloud.beforeSave("tracker", function(request, response) {
      var spaces = availableSpace(request.user.id);
      if (request.object.isNew()) {
    
        if (spaces === 0) {
            response.error("No available spaces");
        } else if (spaces >= 1) {
            response.success();
        } else if (spaces < 0) {
            response.error("Lookup error");
        }
    
      } else {
          response.success();
      }
    });