Запрос исправления AngularJs

Я пытаюсь обновить данные через свой API, используя метод http Patch. Но я получаю неверный ответ или внутреннюю ошибку сервера.

Вот мой вызов JSON:

$http.patch(baseUrl + '/users/' + currentUserEmail,data).success(success).error(error)

person Aslam    schedule 28.10.2015    source источник
comment
Моему методу API PATCH требуется заголовок IF-Match, но разве он не добавляется автоматически?   -  person Aslam    schedule 28.10.2015


Ответы (1)


Вы можете добавить необходимые заголовки, используя необязательные третьи параметры $http.patch:

var config = {headers: {'IF-Match': 'your-data'}};
$http.patch(baseUrl + '/users/' + currentUserEmail,data, config).success(success).error(error)

В документации содержится информация о настраиваемых параметрах конфигурации.

Если вы хотите автоматически добавлять собственные заголовки к каждому запросу, вы можете использовать перехватчик $http :

angular.module('app').factory('HttpInterceptor', function () {
  return {
    request: function (config) {
      if (config.method === 'PATCH')
         config.headers['IF-Match'] = 'your-data';
      return config;
    }
  };
});

angular.module('app').config(['$httpProvider', '$resourceProvider', function ($httpProvider, $resourceProvider) {
    // Add the interceptor to the $httpProvider to intercept http calls
    $httpProvider.interceptors.push('HttpInterceptor');
}])

РЕДАКТИРОВАТЬ: чтобы ответить на ваш комментарий о том, как получить информацию из запроса GET. В перехватчике http вы также можете перехватить ответ:

angular.module('app').factory('HttpInterceptor', function () {
 var etag = null;
  return {
    request: function (config) {
      if (config.method === 'PATCH')
         config.headers['IF-Match'] = etag;
      return config;
    },
   response: function (response) {
      if (response.config.method === 'GET')
          etag = reponse.config.headers['e-tag'];
        // Return the response or promise.
      return response || $q.when(response);
    },
  };
});
person Alexandre Nucera    schedule 28.10.2015
comment
Как получить данные If-Match, поскольку они должны быть равны значению E-Tag из ответа Get? Как я могу прочитать это значение? - person Aslam; 28.10.2015
comment
Распечатайте объект конфигурации в http перехватчике, он содержит все, что вам нужно - person Alexandre Nucera; 28.10.2015
comment
Я могу добавить значение If-Match к запросу, но все еще не понимаю, как получить значение из ответа метода get. - person Aslam; 28.10.2015
comment
Я отредактировал свой ответ (с псевдокодом, я его не проверял) - person Alexandre Nucera; 28.10.2015
comment
Да, я изменил конфигурацию на ответ в функции ответа, но все, что я получаю, это NULL. Я думаю, что функция ответа правильно получает ответ от сервера. Любые идеи? - person Aslam; 28.10.2015
comment
Что такое ноль? Объект ответа содержит объект конфигурации, поэтому вы можете сделать response.config.headers - person Alexandre Nucera; 28.10.2015
comment
Есть проблема с этим решением. В нем сохраняется etag каждого запроса. Например. есть etag для получения файлов css, html файлов и т. д. Поэтому я хотел получить etag, когда пользователь выполняет метод GET для получения информации о пользователе из API. - person Aslam; 01.11.2015
comment
объект конфигурации содержит другие свойства, такие как URL-адрес, поэтому измените условие if в функции запроса в соответствии с вашими потребностями (например: сохранение etag только при доступе к определенному URL-адресу) - person Alexandre Nucera; 07.11.2015