我应该如何将 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"?

当您引用 getput 以及其他 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[] 数组,其中不包括 codemessage.

在数据传输 (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它给调用者。