角度资源未返回错误响应

时间:2016-08-02 15:11:53

标签: angularjs error-handling resources

在使用$ resource时,我遇到了在AngularJS中处理错误响应的麻烦。我的设置与状态200响应完美配合,但是当API抛出400错误时,我只得到一个空对象。

这是我的控制者:

$scope.createProduct = function() {
        Api.product.save($scope.product).$promise.then(
            function(res) {
                console.log(res);
            },
            function(error) {
                console.log(error);
            }
        )
    }

这是我的Api服务:

function ApiService($resource, API_URL) {
    return {
        product: $resource(
            API_URL + '/product/:product_id', { 'product_id': '@product_id' },
            {
                show: { method: 'GET' },
                update: { method: 'PUT', headers: {'Content-Type': 'application/json'} },
            }
        ),
    }
}

这就是在400错误后打印出console.log(错误):

Object {data: null, status: -1, config: Object, statusText: ""}

最后这是错误响应API吐出来的,我没有得到:

{
  "errors": {
    "message": [
      "The town field is required.",
      "The postcode field is required.",
    ]
  }
}

任何帮助将不胜感激,谢谢!

编辑:例如,尝试向https://api.twitter.com/1.1/statuses/destroy/1.json发送POST请求。如果我在Postman上执行此操作,则会收到以下错误消息:

{
  "errors": [
    {
      "code": 215,
      "message": "Bad Authentication data."
    }
  ]
}

如何获得此响应以及字符串“Bad Authentication data”。在Angular?由于某种原因,我不能用我当前的设置做到这一点。

1 个答案:

答案 0 :(得分:0)

该问题可能与您的API服务器和CORS之间的交互有关。

我正在运行一个基于Flask的API后端,该后端也出现了同样的问题。故障排除使我发现在10个连接中的9个中接收到POST请求时,我的API正在执行TCP RST。

Wireshark capture

Flask服务器正在记录响应已正确发送回。

2018-08-19 13:26:59,104 INFO: 127.0.0.1 - - [19/Aug/2018 13:26:59] "POST /users/test HTTP/1.1" 419]

原因

问题的原因是在API后端拒绝了POST请求,而没有先读取POST数据。我将API重构为始终读取POST数据,从而解决了问题。

我不清楚CORS如何影响这种情况,但是只有通过Angular而不是直接调用API时才出现此问题。

以下StackOverflow问题向我指出了解决此问题的正确方向。 No response with POST request and Content-Type "application/json" in flask