У меня возникла проблема с обработкой ошибок в AngularJS при использовании $ resource. Моя настройка отлично работает с ответами состояния 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'} },
}
),
}
}
Это то, что console.log (ошибка) выводится после ошибки 400:
Object {data: null, status: -1, config: Object, statusText: ""}
И, наконец, это API ответов об ошибках, который я не получаю:
{
"errors": {
"message": [
"The town field is required.",
"The postcode field is required.",
]
}
}
Любая помощь будет оценена, спасибо!
EDIT: В качестве примера попробуйте отправить запрос POST на https://api.twitter.com/1.1/statuses/destroy/1.json. Если я это сделаю на Postman, я получаю это сообщение об ошибке:
{
"errors": [
{
"code": 215,
"message": "Bad Authentication data."
}
]
}
Как получить этот ответ и строку "Плохая проверка подлинности". в Угловом? По какой-то причине я не могу сделать это с моей текущей настройкой.
Проблема может относиться к взаимодействию между вашим сервером API и CORS.
Я использую бэкэнд на основе Flask, который представляет эту же проблему. Устранение неполадок привело меня к выводу, что мой API выполняет TCP RST при получении запроса POST примерно в 9 из 10 подключений.
Сервер 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]
причина
Причиной проблемы было отклонение запроса POST в бэкэнде API, не прочитав сначала данные POST. Я переработал свой API, чтобы всегда считывать данные POST, и это решило проблему.
Мне непонятно, как CORS влияет на эту ситуацию, однако эта проблема была видна только при звонках через Angular вместо прямого доступа к API.
Следующий вопрос StackOverflow указал мне в правильном направлении, чтобы решить эту проблему. Нет ответа с запросом POST и Content-Type "application/json" в колбе
headers: {'Accept': 'application/json}
в вашу функцию сохранения API.