Cloud-Code object.save () führt zu "Objekt nicht gefunden" mit sehr seltsamen PUT-Befehl

8

Problembeschreibung

Ich habe einen einfachen Cloud-Code-Befehl, um ein Objekt zu erstellen oder zu aktualisieren. Wenn KEINE objectId übergeben wird, erstellt die Routine ein neues Objekt und gibt die Objekt-ID zurück. Wenn die objectId in der Parameterliste vorhanden ist, ruft sie das Objekt ab und aktualisiert die Parameter entsprechend.

Die Routine funktioniert für neue Objekte in Ordnung.

Das object.save() schlägt fehl, wenn ich versuche, ein Objekt zu aktualisieren, obwohl die Unterroutine object.fetch() funktioniert.

  

Fehler: Code = 101, Nachricht = Objekt nicht gefunden.

Ausführliche Serverprotokolle zeigen einen sehr seltsamen PUT -Befehl ...

an
  

PUT / parse / classes / Receipt / [Objekt% 20Object]

Was ich erwarten würde, ist

  

PUT / parse / classes / Empfang / GJaXcf7fLD

Objekt-ACL ist public r + w

Warum funktioniert object.save() nicht mit einer gültigen Objekt-ID?

_

Cloud-Code

%Vor%

Schritte zum Reproduzieren

  1. Rufen Sie den Cloud-Code aus dem iOS SDK mit Daten für ein neues Objekt auf
  2. Beachten Sie, dass der Befehl funktioniert und der Datenbank ein neues Objekt hinzugefügt wird
  3. Rufen Sie den Befehl erneut mit aktualisierten Informationen
  4. auf
  5. Beachten Sie, dass der Befehl mit Objekt nicht gefunden fehlschlägt

Erwartete Ergebnisse

Objekt sollte entsprechend aktualisiert werden

Tatsächliches Ergebnis

  

Fehler: Code = 101, Nachricht = Objekt nicht gefunden.

Umgebungseinstellung

  • Server

    • Parse-Server-Version: 2.2.12
    • Betriebssystem: Mac OS X 10.11.5
    • Hardware: MacBook Pro 2010
    • Localhost oder Remote-Server? Localhost
    • Javascript: Parse / js1.8.5
    • NodeJS 5.10.1
  • Datenbank

    • MongoDB Version: 3.2.4
    • Hardware: MacBook Pro 2010
    • Localhost oder Remote-Server? Localhost

Logs / Trace

Das Speichern eines neuen Objekts erfolgt zurück

%Vor%

Versuch, Objekt zu aktualisieren, gibt

zurück %Vor%     
MobileVet 19.06.2016, 02:08
quelle

1 Antwort

4

Ich habe es dank einiger Hilfe der Parse-Server-Community und des GitHub-Benutzers flovilmart

herausgefunden

Im Falle der "Aktualisierung" eines Objekts habe ich einen Wörterbucheintrag für den Beleg eingefügt. Dadurch wurde der Empfang, den ich aktualisieren wollte, erfolgreich abgerufen.

Das Problem war jedoch, dass ich, nachdem ich das Belegobjekt eingezogen hatte und mein Wörterbuch der Eigenschaften durchging, um es zu aktualisieren, wieder auf die Informationen des Belegobjekts stieß. So habe ich versucht, eine Eigenschaft des Empfangs-Zeigers zu meinem Empfang hinzuzufügen, wobei der Zeiger selbst ist! Ugh.

Die allerletzte else-Klausel benötigte eine Bedingung, die den Zeiger auf den Quittung (selbst) NICHT enthielt

%Vor%     
MobileVet 08.07.2016, 03:32
quelle