2015-09-19 13 views
8

Ho uno strano problema qui. Ho un progetto creato con Parse.com come back-end (usando il cloudcode per verificare alcune cose quando si effettua una connessione al database). Tutto funziona esattamente come dovrebbe.Parse request.object.get ("KEY") restituisce sempre indefinito

Ma ecco che arriva il problema. Un altro sviluppatore mi ha riferito che c'è qualcosa di sbagliato perché sta diventando "indefinito" ogni volta che prova a chiamare request.object.get('KEY') in CloudCode. Questo sviluppatore usa esattamente la stessa base di codice di me.

Quindi ho deciso di dargli un'occhiata. Mentre con il mio account Parse, ogni applicazione funziona bene (anche di nuova creazione), con l'account Parse dell'altro sviluppatore, non una singola nuova applicazione che abbiamo creato sembra funzionare con lo stesso identico codice. Ed è ancora più strano - creando un account Parse completamente nuovo e una nuova applicazione produce gli stessi errori mentre il mio account personale e le applicazioni continuano a funzionare bene.

Quindi qual è il problema? Stiamo usando CloudCode, e qui è il codice di esempio (in javascript) di un metodo BeforeSave:

Parse.Cloud.beforeSave('Activity', function(request, response) { 
    var currentUser = request.user; 
    var objectUser = request.object.get('fromUser'); 
    if(!currentUser || !objectUser) { 
    response.error('An Activity should have a valid fromUser.'); 
    } else { 
    response.success(); 
    } 
}); 

E ogni volta request.object.get('KEY') rendimenti undefined, per ogni tasto I precedentemente definita nel codice di iOS prima di caricare il PFObject. Si noti che con il mio account personale tutto va bene ...

Ho già visto il thread this, tuttavia l'eliminazione di ACL non ha funzionato. request.object.get() rimane indefinito mentre request.user è definito per ogni account Parse testato tranne il mio.

EDIT 1

Ho anche avuto uno sguardo verso l'oggetto di attività poco prima di essere caricato, e là tutti i campi sono impostati correttamente.

EDIT 2

Dopo aver rimosso completamente il codice nuvola, gli oggetti vengono correttamente caricato a Parse, con tutti i campi è il modo in cui sono stati fissati tramite il client iOS. Quindi sembra che ci sia qualcosa di sbagliato nel codice cloud di Parse, ma non appena un oggetto passa attraverso il codice cloud, perde tutti i suoi campi.

+0

Puoi mostrare cosa c'è in 'request.object'? – raina77ow

+0

'request.object' non è definito, semplicemente non c'è in qualche modo (per l'altro sviluppatore, il mio account è ancora valido) - ma' request.user' esiste. Quando l'oggetto non passa il cloudcode, tutto è lì, tutti i campi sono impostati correttamente. –

risposta

8

Finalmente sono stato in grado di risolvere questo. Questo è sicuramente un bug nell'SDK Javascript di Parse. Ho cambiato la versione dell'SDK di Javascript in global.json tornando alla versione "1.4.2" anziché "latest", ho caricato questo nella cartella cloudcode e tutto è tornato alla normalità.

Puoi anche testare altre versioni, forse anche la v1.5.0 funziona, ma non appena ho scoperto che la v1.4.2 funzionava bene, non ho provato le versioni più recenti.

EDIT

Così, ho scoperto, che Parse deve aver cambiato qualcosa nel loro strumento a riga di comando. Sembra che il file global.json non sia più presente se crei la tua cartella CloudCode con la versione più recente del loro strumento da riga di comando. Tuttavia, puoi crearlo manualmente e caricare la cartella completa nella tua app Parse.

Ecco come il mio cartella CloudCode assomiglia, solo per esempio: cartella CloudCode contiene tre sottocartelle

• nuvola - che contiene file di codice nuvola

• config - contenente il file global.json

• public - contenente il file index.html

Il file global.json contiene le righe di codice:

{ 
    "global": { 
    "parseVersion": "1.4.2" 
    }, 
    "applications": { 
    "YOUR_PARSE_APPS_NAME": { 
     "applicationId": "YOUR_APP_ID", 
     "masterKey": "YOUR_APP_MASTER_KEY" 
    }, 
    "_default": { 
     "link": "YOUR_PARSE_APPS_NAME" 
    } 
    } 
} 
+0

Buon lavoro! Assicurati di segnalarlo come un bug in modo che il team di Parse possa risolverlo. – Russell

+0

Ho lo stesso errore come hai cambiato global.json? dove posso trovarlo? – mert

+0

trovato nel file nascosto .parse.local e modificato 1.4.2 e tutto va bene grazie mille, ho salvato la mia giornata. :) – mert