我应该如何将 ngResource 与特定的响应主体一起使用?
How should i use ngResource with a specific response body?
我的回复正文如下所示:
{
"code": 200,
"message": Items succesfully retrieved,
"items": [
{
...
}
]
}
我之前使用 $http,所以我没有遇到这个问题,但我决定切换到 ngResource,因为它看起来更好。而且我确定我做错了,所以如果你能告诉我如何将 'items'(在这个例子中)定位为返回的对象(与 put,post,.. .)
这是我为试用 ngResource 而制作的代码示例
app.factory("Product", function($resource,APILINK) {
return $resource(APILINK+"/api/v1/products/:id", {id: '@id'}, {
query: {method: 'GET',
isArray: false
},
update: { method: 'PUT' }
});
});
我真的不知道这是否是构建我的 REST Api 发送代码和消息的好方法。但是这样感觉更干净了:'(
我需要修改我的 REST Api 发送的 json 吗?或者有没有办法让 ngResource 忽略响应正文中的 "code" 和 "message"?
当您引用 get
和 put
以及其他 REST 动词时,您可以指定 items
对象。
GET 示例:
var itemList = Product.query({ id: 12345 }).items;
PUT 示例:
var MyItemList = {
"code": 200,
"message": "Items succesfully retrieved",
"items": [ { ... }, { ... }, { ... } ]
}
Product.update({ id: 12345 }, MyItemList.items);
尽管如果您只是发送第一个示例中的 itemList
,您已经将它缩小到 items[]
数组,其中不包括 code
和 message
.
在数据传输 (json) 对象中设置状态代码和消息可能不是正确的方法。是否需要访问状态码?
The documentation on $resource内容如下:
- HTTP GET "class" 操作:Resource.action([参数],[成功],
[错误])
- 非 GET "class" 操作:Resource.action([参数],
postData, [成功], [错误])
- 非 GET 实例操作:
instance.$action([参数], [成功], [错误])
因此,每个 $resource 调用都会给我们一个成功和错误回调。
例如:
var Product = $resource('/api/as/product');
Product.query(function(items) {
// success handler
}, function(error) {
// error handler
});
您可能无法读取状态码,但您知道您的调用是否成功。
或者,如果必须获取状态代码,您可以查看拦截器:
// Resource
var Product = $resource(url, {}, {
get: {
method: 'GET'
interceptor: {
response: function(response) {
var result = response.resource;
result.$status = response.status;
return result;
}
}
}
});
// Caller
Product.get(params, function(result) {
console.log('status code: ' + result.$status);
});
当使用此资源进行调用时,我们将拦截结果,将响应中的状态代码添加到它,然后return它给调用者。
我的回复正文如下所示:
{
"code": 200,
"message": Items succesfully retrieved,
"items": [
{
...
}
]
}
我之前使用 $http,所以我没有遇到这个问题,但我决定切换到 ngResource,因为它看起来更好。而且我确定我做错了,所以如果你能告诉我如何将 'items'(在这个例子中)定位为返回的对象(与 put,post,.. .)
这是我为试用 ngResource 而制作的代码示例
app.factory("Product", function($resource,APILINK) {
return $resource(APILINK+"/api/v1/products/:id", {id: '@id'}, {
query: {method: 'GET',
isArray: false
},
update: { method: 'PUT' }
});
});
我真的不知道这是否是构建我的 REST Api 发送代码和消息的好方法。但是这样感觉更干净了:'(
我需要修改我的 REST Api 发送的 json 吗?或者有没有办法让 ngResource 忽略响应正文中的 "code" 和 "message"?
当您引用 get
和 put
以及其他 REST 动词时,您可以指定 items
对象。
GET 示例:
var itemList = Product.query({ id: 12345 }).items;
PUT 示例:
var MyItemList = {
"code": 200,
"message": "Items succesfully retrieved",
"items": [ { ... }, { ... }, { ... } ]
}
Product.update({ id: 12345 }, MyItemList.items);
尽管如果您只是发送第一个示例中的 itemList
,您已经将它缩小到 items[]
数组,其中不包括 code
和 message
.
在数据传输 (json) 对象中设置状态代码和消息可能不是正确的方法。是否需要访问状态码?
The documentation on $resource内容如下:
- HTTP GET "class" 操作:Resource.action([参数],[成功], [错误])
- 非 GET "class" 操作:Resource.action([参数], postData, [成功], [错误])
- 非 GET 实例操作: instance.$action([参数], [成功], [错误])
因此,每个 $resource 调用都会给我们一个成功和错误回调。 例如:
var Product = $resource('/api/as/product');
Product.query(function(items) {
// success handler
}, function(error) {
// error handler
});
您可能无法读取状态码,但您知道您的调用是否成功。
或者,如果必须获取状态代码,您可以查看拦截器:
// Resource
var Product = $resource(url, {}, {
get: {
method: 'GET'
interceptor: {
response: function(response) {
var result = response.resource;
result.$status = response.status;
return result;
}
}
}
});
// Caller
Product.get(params, function(result) {
console.log('status code: ' + result.$status);
});
当使用此资源进行调用时,我们将拦截结果,将响应中的状态代码添加到它,然后return它给调用者。