6

저는 AngularJS, MongoDB 및 NodeJS를 사용하여 앱을 제작하고 있습니다. 내 앱은 CRUD 작업을 위해 Mongolab REST API를 사용합니다. 또한 디버깅을 위해 Google 크롬 개발자 도구를 사용하고 있습니다. 오늘까지Chrome dev - 읽기 전용 속성에 할당 할 수 없습니다.

, 몽고 내 업데이트 작업은 크롬과 파이어 폭스 (I 가끔 사용하는 것이)하지만 모두 잘 작동하고 크롬이 자동으로 업데이트 후 업데이트가 실패하고이 오류가 : 내가 가지고있는

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 

을 이 오류는 Chrome에서만 발생하며 Firefox는 오류가 전혀 표시되지 않고 업데이트가 성공한 것입니다. 내 각 모듈에 업데이트 자체를 엄격 모드를 사용 이를 사용하여 수행됩니다 :

var queryJson = { "$inc": {"count":1} , "$set" : {"messages": message} }; 

내가 때문에 크롬에 갱신 또는 뭔가 다른인지 확실하지 않다 :

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); 
}; 

.

누구나 이런 식으로 된 사람이 있습니까? 어떤 도움이라도 대단히 감사하겠습니다.

참고 : {_id : undefined}는 개체에서 _id 속성을 제거하는 방법 일뿐입니다. MongoLab은 PUT을 통해 전송 된 데이터의 일부가 아닌 URL의 일부로 전송되도록 업데이트하는 객체의 ID가 필요합니다.

그 일을하는 또 다른 방법 :

var objCopy = angular.copy(this) ; 
if (objCopy._id) 
    delete objCopy["_id"] ; 

httpPromise = $http.put(url + "/" + this.$id(), angular.extend(params, objCopy), {params:defaultParams}) ; 

답변

5

나는 그것을 알아 냈다. TypeError는 객체 확장에 대한 angular.js 라인 409를 참조했습니다. 내가 잘못 을하고 있었는지 :

var params = angular.isObject(queryJson) ? JSON.stringify(queryJson) : {}; 

에 대한 :

angular.extend(params, objCopy) 

그래서, 나는 ($ 업데이트 방법) 무엇을 변경하는 대신 직접 내 objcopy의이 PARAMS을 복사

var params = angular.isObject(queryJson) ? angular.extend({}, queryJson) : {}; 

httpPromise = $http.put(url + "/" + this.$id(), angular.extend(params, objCopy), {params:defaultParams}) ; 

을, 나는 비어있는 물건을 목표로 삼았다. 객체 매개 변수는 비어 있거나 올바르게 확장됩니다.

1

아니, 하나 개의 브라우저에서 작동하고 왜 생각하지 다른, 그러나 당신이이 일을해서는 안 : 내가 생각할 수있는 어떤 이유로 {_id:undefined}.

+0

감사합니다! 그것은 단지 _id 속성을 제거하는 방법 일뿐입니다 (위의 게시물에서 편집을 참조하십시오). –

+1

하지만 _id 속성을 수정해서는 안됩니다. 몽고는 그것을 좋아하지 않을 것입니다. 열쇠를 삭제하는 것이 좋습니다. – Paul

+0

그래, 대신 키를 삭제하겠습니다. –

관련 문제