Skip to content

Cloud Code object.save() results in 'object not found' with very strange PUT command #2098

Closed
@MobileVet

Description

@MobileVet

Issue Description

I have a simple Cloud Code command to create or update an object. If there is NO objectId passed in, the routine creates a new object and returns the objectId. If the objectId exists in the parameter list, it fetches the object and updates the parameters accordingly.

The routine works for new objects fine.

The object.save() is failing when I try to update an object, despite the object.fetch() sub-routine working.
error: code=101, message=Object not found.

Verbose server logs indicate a very strange PUT command...
verbose: PUT /parse/classes/Receipt/[object%20Object]**

Object ACL is public r+w

Cloud Code

Parse.Cloud.define("uploadReceipt", function(request,response) {
    var Receipt = Parse.Object.extend("Receipt");
    var receipt = new Receipt();

    // passed in parameters are ['property' : ['type' : t, 'value' : v]]
    var dict = request.params;
    var objectIdDict = dict["objectId"];
    Parse.Promise.as().then(function() {
        // if we already have an objectId we are UPDATING
        // Need to FETCH first
        if (objectIdDict != undefined) {
            receipt.set("objectId",objectIdDict["value"]);
            return receipt.fetch();
        }
        else {
            return Parse.Promise.as(receipt);
        }

    }).then(function(receipt) {
        // copy over the keys from our passed in parameters to the object
        for (var key in dict) {
            //console.log("Key: " + key + "   Value: " + dict[key]["value"]);
            if (dict[key]["type"] == "Raw") {
                receipt.set(key,dict[key]["value"]);
            }
            else if (dict[key]["type"] == "Date" && key != "updatedAt") {
                var time = dict[key]["value"] * 1000;   // milliseconds
                receipt.set(key,new Date(time));
            }
            else {
                // object type
                var Obj = Parse.Object.extend(dict[key]["type"]);
                var newObj = new Obj();
                newObj.id = dict[key]["value"];
                receipt.set(key,newObj);
            }
        }

        // make sure our user is set
        receipt.set("user",request.user);

        // adjust the status because it has now been uploaded
        receipt.set("status",RECEIPT_SUBMITTED);
        return receipt.save();

    }).then(function(receipt) {
        response.success({"status":receipt.get("status"),"objectId":receipt.id});

    },function (error) {
        response.error(error);
    });
});

Steps to reproduce

  1. Call the cloud code from iOS SDK with data for a new object
  2. Notice that the command works and a new object is added to the database
  3. Call the command again with updated information
  4. Notice that the command fails with object not found

Expected Results

Object should be updated accordingly

Actual Outcome

error: code=101, message=Object not found.

Environment Setup

  • Server
    • parse-server version: 2.2.12
    • Operating System: Mac OS X 10.11.5
    • Hardware: MacBook Pro 2010
    • Localhost or remote server? Localhost
    • Javascript: Parse/js1.8.5
    • NodeJS 5.10.1
  • Database
    • MongoDB version: 3.2.4
    • Hardware: MacBook Pro 2010
    • Localhost or remote server? Localhost

Logs/Trace

** Storing NEW object returns **

verbose: POST /parse/classes/Receipt { 'user-agent': 'node-XMLHttpRequest, Parse/js1.8.5 (NodeJS 5.10.1)',
accept: '/',
'content-type': 'text/plain',
host: 'localhost:1337',
'content-length': '471',
connection: 'close' } {
"date": {
"__type": "Date",
"iso": "2016-06-19T00:30:37.492Z"
},
"category": {
"__type": "Pointer",
"className": "Category",
"objectId": "XZ1bSHtZBY"
},
"status": 0,
"amount": 61.45,
"notes": "Hopefully this works well",
"gui_status": -1,
"currency": "USD",
"user": {
"__type": "Pointer",
"className": "_User",
"objectId": "vL4ih9BAX8"
}
}
verbose: {
"status": 201,
"response": {
"objectId": "GJaXcf7fLD",
"createdAt": "2016-06-19T00:30:57.092Z"
},
"location": "http://localhost:1337/parse/classes/Receipt/GJaXcf7fLD"
}
Finished
verbose: {
"response": {
"result": {
"status": 0,
"objectId": "GJaXcf7fLD"
}
}
}

** Attempt to Update object returns **

verbose: PUT /parse/classes/Receipt/[object%20Object] { 'user-agent': 'node-XMLHttpRequest, Parse/js1.8.5 (NodeJS 5.10.1)',
accept: '/',
'content-type': 'text/plain',
host: 'localhost:1337',
'content-length': '473',
connection: 'close' } {
"category": {
"__type": "Pointer",
"className": "Category",
"objectId": "XZ1bSHtZBY"
},
"status": 0,
"amount": 5.47,
"notes": "How about now",
"gui_status": 0,
"date": {
"__type": "Date",
"iso": "2016-06-19T00:12:25.788Z"
},
"currency": "USD",
"user": {
"__type": "Pointer",
"className": "_User",
"objectId": "vL4ih9BAX8"
}
}
verbose: error: code=101, message=Object not found.
ParseError { code: 101, message: 'Object not found.' }
verbose: error: code=141, code=101, message=Object not found.

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