Javascript 角度资源:错误:$Resource:badcfg
我已经看过这里的其他帖子,但仍然无法解决我的问题 我得到一个错误: $resource:badcfg响应与配置的参数不匹配 我相信这个错误是由它返回数组而不是对象引起的,反之亦然 这是我的密码: 在我的工厂里(我添加了isArray:错误,但仍然不是运气) 然后在我工厂的退货区Javascript 角度资源:错误:$Resource:badcfg,javascript,html,angularjs,angularjs-resource,Javascript,Html,Angularjs,Angularjs Resource,我已经看过这里的其他帖子,但仍然无法解决我的问题 我得到一个错误: $resource:badcfg响应与配置的参数不匹配 我相信这个错误是由它返回数组而不是对象引起的,反之亦然 这是我的密码: 在我的工厂里(我添加了isArray:错误,但仍然不是运气) 然后在我工厂的退货区 find: function(id){ return task.get({ id: id }); } 在我的Flask服务器中,当我加载页面时,它会做出正确的响应: 127.0.0.1 -
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 -
但是我还是得到了错误
这也是我的服务器提供的,如果我把它放在浏览器中
Iv也尝试了这个,但得到了相同的错误:
console.log(task.get({ id: 1 }));
你有没有试过这样的东西:
var task = $resource('http://localhost:5000/task/:id', {id:'@id'}, {
'get': {method:'GET', isArray: false},
});
你错过了{id:'@id'}来传递参数id结果我需要将isArray:false设置为true 因此: 当
$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},
});
而是使用查询
操作方法:
find: function(id){
//return task.get({ id: id });
//INSTEAD use query action method
return task.query({ id: id });
}
这将避免让熟悉$resource服务约定的程序员感到困惑
有关详细信息,请参阅
使用
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;
};
}
}
});
我认为最好更改API签名和实现。id参数为的
get
应该返回一个对象,而不是数组这是真的,尽管我无法在任务中编辑API,因此很头痛:/但是感谢您的建议您可以将服务器配置为返回一个对象而不是一个包含单个元素的数组吗?
var task = $resource('http://localhost:5000/task/:id', {id:'@id'}, {
//AVOID changing default
//'get': {method:'GET', isArray: true},
});
find: function(id){
//return task.get({ id: id });
//INSTEAD use query action method
return task.query({ id: id });
}
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;
};
}
}
});