jfa*_*fab 6 javascript typeerror mongodb google-chrome-devtools angularjs
我正在使用AngularJS,MongoDB和NodeJS构建应用程序.我的应用程序使用Mongolab REST API进行CRUD操作.我也在使用谷歌Chrome开发者工具进行调试.
直到今天,我对mongo的更新操作在Chrome和Firefox上都运行良好(我偶尔使用)但在Chrome自动更新后,更新失败并且我有这个错误:
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
Run Code Online (Sandbox Code Playgroud)
我只在Chrome上出现此错误,Firefox根本没有显示任何错误,并且更新成功.在我的角度模块中使用严格模式,更新本身使用以下方法完成:
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);
};
Run Code Online (Sandbox Code Playgroud)
地点:
var queryJson = { "$inc": {"count":1} , "$set" : {"messages": message} };
Run Code Online (Sandbox Code Playgroud)
我不确定是不是因为Chrome或其他内容的更新.
有没有人遇到这样的事情?任何帮助将不胜感激.
注意:{_ id:undefined}只是从对象中删除_id属性的一种方法.MongoLab要求更新对象的id以作为URL的一部分发送,而不是作为通过PUT发送的数据的一部分.
另一种方式:
var objCopy = angular.copy(this) ;
if (objCopy._id)
delete objCopy["_id"] ;
httpPromise = $http.put(url + "/" + this.$id(), angular.extend(params, objCopy), {params:defaultParams}) ;
Run Code Online (Sandbox Code Playgroud)
我想到了.TypeError引用了angular.js第409行,它是关于扩展一个对象的.我做错了什么:
angular.extend(params, objCopy)
Run Code Online (Sandbox Code Playgroud)
那么,我改变了什么($ update方法):
var params = angular.isObject(queryJson) ? JSON.stringify(queryJson) : {};
Run Code Online (Sandbox Code Playgroud)
用于:
var params = angular.isObject(queryJson) ? angular.extend({}, queryJson) : {};
httpPromise = $http.put(url + "/" + this.$id(), angular.extend(params, objCopy), {params:defaultParams}) ;
Run Code Online (Sandbox Code Playgroud)
我没有直接将我的objCopy复制到params,而是将一个空对象作为目标.对象参数将为空或正确扩展.
归档时间: |
|
查看次数: |
29254 次 |
最近记录: |