在使用$ 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?由于某种原因,我不能用我当前的设置做到这一点。
答案 0 :(得分:0)
该问题可能与您的API服务器和CORS之间的交互有关。
我正在运行一个基于Flask的API后端,该后端也出现了同样的问题。故障排除使我发现在10个连接中的9个中接收到POST请求时,我的API正在执行TCP RST。
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