2012-10-12 19 views
6

Sto utilizzando Meteor 4.2 (Windows) e ricevo sempre "l'aggiornamento non è riuscito: 403 - Accesso negato. Impossibile sostituire il documento nella raccolta limitata" quando sto provando per aggiornare un oggetto nella mia collezione. Stranamente non ho avuto problemi ad inserirne di nuovi, solo gli aggiornamenti stanno fallendo.Meteor: impossibile sostituire il documento nella raccolta limitata

ho cercato di "consentire" tutto sulla mia collezione:

Maps.allow({ 
    insert: function() { return true; }, 
    update: function() { return true; }, 
    remove: function() { return true; }, 
    fetch: function() { return true; } 
}); 

Ma ancora, questo aggiornamento non riesce:

Maps.update({ 
    _id: Session.get('current_map') 
}, { 
    name: $('#newMapName').val() 
}); 

C'è qualcos'altro che posso controllare? O forse il mio codice è sbagliato? L'ultima volta che ho giocato con il mio progetto era con una versione precedente di Meteor (< 4.0).

Grazie per il vostro aiuto.

PS: solo per informazioni, quando eseguo questo aggiornamento, la raccolta locale viene aggiornata, posso vedere le modifiche nell'interfaccia utente. Quindi molto rapidamente viene ripristinato insieme al messaggio di errore, in quanto le modifiche sono state respinte dal lato server.

risposta

8

OK, la sintassi è stata effettivamente errata. Non capisco davvero perché, come stava funzionando bene prima, ma in ogni caso, ecco il codice che funziona bene:

Maps.update({ 
    Session.get('current_map') 
}, { 
    $set: { 
     name: $('#newMapName').val() 
    } 
}); 
+0

E 'il bit $ set (il contenuto di salvare deve essere avvolto in $ set), Ho appena incontrato questo problema e grazie alla vostra risposta che ho macchiato il mio incidente, grazie :) –

+0

Grazie, mi hai salvato la giornata: D – Nick

0

Sembra che deve essere correlato a quello che stai memorizzazione nel 'current_map' variabile di sessione. Se si tratta di un oggetto db, probabilmente assomiglia allo {_id:<mongo id here>} che farebbe funzionare correttamente il finder degli aggiornamenti.

mi sono imbattuto negli stessi problemi, e hanno trovato la seguente lavorare

Blocks.update {_id:block_id}, {$set: params} 

dove params è un hash di tutti i bit che mi piacerebbe aggiornare e block_id è l'ID oggetto Mongo del blocco I sto cercando di aggiornare.

La nota sull'aggiornamento lato client (che lampeggia l'aggiornamento e quindi ripristina) è il comportamento previsto. Se controlli i loro documenti sotto il Data and Security section:

Meteor ha un trucco carino, però. Quando un client invia una scrittura al server, aggiorna immediatamente la cache locale, senza attendere la risposta del server. Ciò significa che lo schermo si ridisegnerà immediatamente. Se il server ha accettato l'aggiornamento - cosa che dovrebbe accadere per la maggior parte del tempo in un client che si comporta correttamente - il client ha fatto un salto sul cambiamento e non ha dovuto attendere il round trip per aggiornare il proprio schermo. Se il server rifiuta la modifica, Meteor ripristina la cache del client con il risultato del server.

Problemi correlati