Угловой ресурс не возвращает ответ об ошибке

0

У меня возникла проблема с обработкой ошибок в 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."
    }
  ]
}

Как получить этот ответ и строку "Плохая проверка подлинности". в Угловом? По какой-то причине я не могу сделать это с моей текущей настройкой.

  • 0
    Сначала проверьте консоль браузера, действительно ли вы получаете json с сервера? Попробуйте добавить headers: {'Accept': 'application/json} в вашу функцию сохранения API.
  • 0
    Нет, я получаю сообщение об ошибке «Не удалось загрузить данные ответа» в Chrome для этого запроса, поэтому я предполагаю, что я что-то не так делаю при вызове API. Я получаю правильный ответ об ошибке в Почтальоне. И, к сожалению, добавление этой строки не помогло.
Показать ещё 4 комментария
Теги:
resources
error-handling

1 ответ

0

Проблема может относиться к взаимодействию между вашим сервером API и CORS.

Я использую бэкэнд на основе Flask, который представляет эту же проблему. Устранение неполадок привело меня к выводу, что мой API выполняет TCP RST при получении запроса POST примерно в 9 из 10 подключений.

Захват Wireshark

Сервер 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" в колбе

Ещё вопросы

Сообщество Overcoder
Наверх
Меню