我在这里看过其他帖子,但仍然无法解决我的问题。
我收到错误:
$ resource:badcfg响应与配置的参数
不匹配
我认为这个错误是由它返回一个数组而不是一个对象引起的,反之亦然。
这是我的代码:
在我的工厂内(我添加了isArray:false但仍然没有运气)
var task = $resource('http://localhost:5000/task/:id', {id:'@id'}, {
'get': {method:'GET', isArray: false},
});
然后在我工厂的返回部分
find: function(id){
return task.get({ id: id });
}
在我的Flask服务器中,它在我加载页面时执行正确的响应:
127.0.0.1 - - [28/Feb/2017 14:35:13] "GET /task/1 HTTP/1.1" 200 -
但是我仍然收到错误?
如果我把它放在浏览器中,这也是我的服务器提供的 http://localhost:5000/task/1
[{"completed": true, "id": 1, "ownerName": "Ryan", "task": "Test Activity", "title": "A test task"}]
我也试过这个并得到同样的错误:
console.log(task.get({ id: 1 }));
答案 0 :(得分:1)
当
$resource
服务期望响应可以作为数组反序列化但接收对象时,会发生此错误,反之亦然。默认情况下,所有资源操作都需要对象,但需要数组的query
除外。要解决此错误,请确保您的
$resource
配置与从服务器返回的数据的实际格式相匹配。
$ resource的默认操作是:
{ 'get': {method:'GET'},
'save': {method:'POST'},
'query': {method:'GET', isArray:true},
'remove': {method:'DELETE'},
'delete': {method:'DELETE'} };
避免更改默认方法:
var task = $resource('http://localhost:5000/task/:id', {id:'@id'}, {
//AVOID changing default
//'get': {method:'GET', isArray: true},
});
而是使用query
操作方法:
find: function(id){
//return task.get({ id: id });
//INSTEAD use query action method
return task.query({ id: id });
}
这样可以避免让熟悉$ resource服务约定的程序员感到困惑。
有关详细信息,请参阅AngularJS $resource API Reference。
transformResponse
从数组中提取对象如果服务器错误地返回数组中包含的资源对象,则可以使用响应转换函数提取它:
var task = $resource('http://localhost:5000/task/:id', {id:'@id'}, {
'get': {method:'GET',
transformResponse: function(json) {
var data = angular.fromJson(json);
if ((typeof data == 'array' && (data.length == 1)) {
return data[0];
} else {
return data;
};
}
}
});
答案 1 :(得分:0)
你尝试过类似的事情吗?
var task = $resource('http://localhost:5000/task/:id', {id:'@id'}, {
'get': {method:'GET', isArray: false},
});
您错过了{id:'@ id'}来传递参数ID
答案 2 :(得分:0)
原来我需要将isArray:false设置为true 这样:
var task = $resource('http://localhost:5000/task/:id', {id:'@id'}, {
'get': {method:'GET', isArray: true},
});