Javascript 我应该如何将ngResource与特定的响应主体一起使用?

Javascript 我应该如何将ngResource与特定的响应主体一起使用?,javascript,angularjs,node.js,rest,ngresource,Javascript,Angularjs,Node.js,Rest,Ngresource,我的反应体如下所示: { "code": 200, "message": Items succesfully retrieved, "items": [ { ... } ] } 我以前使用过$http,所以我没有这个问题,但我决定切换到ngResource,因为它看起来更好。我肯定我做错了,所以如果你能告诉我如何将“items”(在本例中)作为返回对象(put

我的反应体如下所示:

{
   "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' }
  });
});
我真的不知道这是否是构建RESTAPI发送代码和消息的好方法。但这样感觉更干净:“(


我是否需要修改REST Api发送的json?或者是否有办法使ngResource忽略响应正文中的“代码”和“消息”

当您引用
get
put
以及其他REST动词时,您可以指定
对象

获取示例:

var itemList = Product.query({ id: 12345 }).items;
var MyItemList = {
    "code": 200,
    "message": "Items succesfully retrieved",
    "items": [ { ... }, { ... }, { ... } ]
}

Product.update({ id: 12345 }, MyItemList.items);
放置示例:

var itemList = Product.query({ id: 12345 }).items;
var MyItemList = {
    "code": 200,
    "message": "Items succesfully retrieved",
    "items": [ { ... }, { ... }, { ... } ]
}

Product.update({ id: 12345 }, MyItemList.items);

虽然如果您只是发送第一个示例中的
itemList
,但您已经将其缩小到仅发送
items[]
数组不包含
code
消息

当您引用
get
put
以及其他REST谓词时,可以指定
对象

获取示例:

var itemList = Product.query({ id: 12345 }).items;
var MyItemList = {
    "code": 200,
    "message": "Items succesfully retrieved",
    "items": [ { ... }, { ... }, { ... } ]
}

Product.update({ id: 12345 }, MyItemList.items);
放置示例:

var itemList = Product.query({ id: 12345 }).items;
var MyItemList = {
    "code": 200,
    "message": "Items succesfully retrieved",
    "items": [ { ... }, { ... }, { ... } ]
}

Product.update({ id: 12345 }, MyItemList.items);

虽然您只是发送第一个示例中的
itemList
,但您已经将其缩小到了
items[]
数组,其中不包括
code
message

设置数据传输(json)中的状态代码和消息对象可能不是方法。是否需要访问状态代码

全文如下:

  • HTTP获取“类”操作:Resource.action([参数],[成功], [错误])
  • 非获取“类”操作:Resource.action([参数], postData,[成功],[错误])
  • 非获取实例操作: 实例.$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);
 });

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

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

全文如下:

  • HTTP获取“类”操作:Resource.action([参数],[成功], [错误])
  • 非获取“类”操作:Resource.action([参数], postData,[成功],[错误])
  • 非获取实例操作: 实例.$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);
 });

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

包含代码、消息和项目数组的“响应正文”本身是对象吗?如果是,您可以发布/放置该对象,并以这种方式检索项目数组。是您的“响应正文”吗,包含代码、消息和项目数组对象本身?如果是,您可以发布/放置该对象,并以这种方式检索项目数组。谢谢!正是我想要的:拦截器!谢谢!正是我想要的:拦截器!