我的回复正文如下所示:

{
   "code": 200,
   "message": Items succesfully retrieved,
   "items": [
              {
                 ...
              }
            ]
}


我以前使用$ http,所以没有这个问题,但是我决定切换到ngResource,因为它看起来更好。而且我确定我做错了,因此,如果您能告诉我如何将“项目”(在此示例中)定位为返回的对象(与放置,放置,...相同)

这是我尝试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在响应正文中忽略“代码”和“消息”?

最佳答案

在您的数据传输(json)对象中设置状态代码和消息可能不是解决之道。是否需要访问状态码?

The documentation on $resource的内容如下:


HTTP GET“类”操作:Resource.action([parameters],[success],
[错误])
非GET“类”操作:Resource.action([parameters,
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);
 });


使用此资源进行调用时,我们将截取结果,将响应中的状态代码添加到该结果中,然后将其返回给调用方。

10-06 15:55