Buduję aplikację przy użyciu AngularJS, MongoDB i NodeJS. Moja aplikacja wykorzystuje interfejs API REST API Mongolab do operacji CRUD. Używam również Narzędzi dla programistów Google Chrome do debugowania.Chrome dev - Nie można przypisać do właściwości tylko do odczytu
Do dzisiaj moje operacje aktualizacji na Mongo pracowali w porządku zarówno Chrome i Firefox (który używam sporadycznie), ale po Chrome aktualizowane automatycznie, aktualizacje nie i mam ten błąd:
TypeError: Cannot assign to read only property '_id' of {"$inc":{"count":1},"$set":{"messages":[{"unread":false,"flagged":false}]}}
at http://cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.9/angular.js:409:18
mam ten błąd występuje tylko w przeglądarce Chrome, Firefox nie pokazuje żadnego błędu, a aktualizacja zakończyła się pomyślnie. Korzystanie z trybu ścisłego moim modułu kątowego samej aktualizacji odbywa się za pomocą tego:
Resource.prototype.$update = function (queryJson,successcb, errorcb) {
var params = angular.isObject(queryJson) ? JSON.stringify(queryJson) : {},
httpPromise = $http.put(url + "/" + this.$id(), angular.extend(params, this, {_id:undefined}), {params:defaultParams});
return thenFactoryMethod(httpPromise, successcb, errorcb);
};
Gdzie:
var queryJson = { "$inc": {"count":1} , "$set" : {"messages": message} };
Nie jestem pewien, czy to z powodu aktualizacji Chrome lub coś innego.
Czy ktoś napotkał coś takiego? Każda pomoc zostanie bardzo doceniona.
Uwaga: {_id: undefined} jest po prostu sposobem na usunięcie właściwości _id z obiektu. MongoLab wymaga, aby identyfikator obiektu był aktualizowany i wysyłany jako część adresu URL, a nie jako część danych przesyłanych przez PUT.
Kolejny sposób to zrobić:
var objCopy = angular.copy(this) ;
if (objCopy._id)
delete objCopy["_id"] ;
httpPromise = $http.put(url + "/" + this.$id(), angular.extend(params, objCopy), {params:defaultParams}) ;
Dziękujemy! to tylko sposób na usunięcie właściwości _id (patrz edytuj na powyższym wpisie). –
Ale nie powinieneś modyfikować właściwości _id; mongodb tego nie polubi. Lepiej usuwaj klucz. – Paul
OK, zamiast tego usunę klucz. –