2016-05-19 4 views
1

Ich habe eine Sammlung, die Verweise auf Bilder hat, und wenn der Benutzer diese Sammlung mit neuen Bildern aktualisiert, möchte ich die alten Bilder löschen. Ich halte Verweise auf die URL für die alten Bilder, um sie in eine Funktion zu übertragen, die in den Cloud-Code geschrieben ist.Probleme beim Löschen von PFFile in Parse mit opensource parse-server

Ich führe all diese lokale auf meinem Computer, aber ich bekomme das gleiche Problem, wenn ich dies mit dem Server läuft auf Heroku laufen. Dies wird vom iOS SDK aufgerufen. Hier

ist die Funktion in Frage:

Parse.Cloud.define('removeOldFilesFromDB', function (request, response) { 

    var fileUrls = request.params.fileUrls; 
    var promises = []; 

    for (var a = 0; a < fileUrls.length; a++) { 

     promises.push(Parse.Cloud.httpRequest({ 
      method: 'DELETE', 
      url: fileUrls[a], 
      headers: { 
       'X-Parse-Application-Id': process.env.APP_ID || 'myAppId', 
       'X-Parse-Master-Key': process.env.MASTER_KEY || 'myMasterKey' 
      } 
     })); 

    } 

    Parse.Promise.when(promises).then(function (result) { 
     console.log("Successfully deleted files"); 
     response.success(result); 
    }, function(a,b,c,d,e) { 
     console.log("Nope jacked it up!"); 
     response.error("Error deleting files"); 
    }); 

}) 

Wenn ich den Code in Frage stellen, kann ich nicht einmal sehen, die DELETE-Anfrage in den Parse-Server-Protokolle überhaupt.

Ich habe die verbose: true Flagge in meiner Config gesetzt, und das ist die ausführliche Ausgabe zu den Protokollen, die ich erhalte, wenn diesen Aufruf vom Client zu machen:

verbose: POST /parse/functions/removeOldFilesFromDB { host: 'e0ae0682.ngrok.io', 
'x-parse-client-version': 'i1.12.0', 
accept: '*/*', 
'x-parse-session-token': 'r:5290c76c47678213770765d990ee38b6', 
'x-parse-application-id': 'myAppId', 
'x-parse-client-key': 'myClientKey', 
'x-parse-installation-id': '3fafc219-1c63-4d68-b42f-5caa3e1c27cb', 
'accept-language': 'en-us', 
'accept-encoding': 'gzip, deflate', 
'x-parse-os-version': '8.1 (12B411)', 
'content-type': 'application/json; charset=utf-8', 
'content-length': '204', 
'user-agent': 'Spin%20the%20Bottle/1 CFNetwork/711.1.12 Darwin/14.0.0', 
'x-parse-app-build-version': '1', 
'x-parse-app-display-version': '1.0', 
'x-forwarded-for': '71.163.238.223' } { 
"fileUrls": [ 
    "http://e0ae0682.ngrok.io/parse/files/myAppId/7b5b50e2871af27971be0425f367ab96_file.bin", 
    "http://e0ae0682.ngrok.io/parse/files/myAppId/cff909602b60b15331b1ac60a4f08697_file.bin" 
    ] 
} 

Nope jacked it up! 
verbose: error: code=141, message=Error deleting files 

So ist es seltsam, dass der DELETE-Aufruf nicht ist sogar da drinnen auftauchen. Rufe ich es falsch mit der Parse.Cloud.httpRequest-Methode oder etwas?

Wenn ich die Werte für fileUrl in meinem Browser ankreuze, werden die Bilder heruntergeladen, die ich löschen möchte, damit der Pfad korrekt ist.

Dies ist auf der neuesten veröffentlichten Version von Parse-Server, 2.2.10.

Diese waren die Anweisungen, die ich folgenden dachte, dass dies der richtige Weg ist, dies zu tun:

https://parse.com/docs/rest/guide/#files-deleting-files

Und das hier den Rest Anruf aus dem Cloud-Code zu machen:

https://parse.com/questions/making-a-rest-call-from-within-cloud-code

Entsprechend sagt es, dass ich Parse.Cloud.httpRequest verwenden kann, um REST-Aufrufe zu machen, also bin ich nicht sicher, was Sie als das nicht die richtigen Wege bezeichnen. Beide haben Links zu den Dokumenten und das ist, was ich befolgt habe.

Also mache ich offensichtlich etwas falsch, aber ich bin mir nicht sicher, kann jemand helfen?

Antwort

0

Entfernen Sie einfach myAppId aus der Datei-URL.

(zB)

von

http://e0ae0682.ngrok.io/parse/files/myAppId /7b5b50e2871af27971be0425f367ab96_file.bin

zu

http://e0ae0682.ngrok.io/parse/files/7b5b50e2871af27971be0425f367ab96_file.bin

+0

Wir hatten letztendlich völlig aus dem Backend zu entfernen analysieren, viel bessere Lösung am Ende :) –

+0

Welche Lösung haben Sie anstelle von Parse ausgewählt? – ananfang

+0

Wir haben keine Standardlösung verwendet und verwenden stattdessen nur unseren eigenen node.js-Server. Es gibt jetzt viel weniger Aufwand, da Parse weg ist und es ist auch sicherer, da wir in 100% Kontrolle über alles sind. –

Verwandte Themen