Permintaan Patch AngularJs

Saya mencoba memperbarui data melalui API saya menggunakan metode http Patch. Tapi saya mendapat Respon Buruk atau Kesalahan Server Internal.

Ini panggilan JSON saya:

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

person Aslam    schedule 28.10.2015    source sumber
comment
Metode API PATCH saya memerlukan header IF-Match tetapi bukankah itu ditambahkan secara otomatis?   -  person Aslam    schedule 28.10.2015


Jawaban (1)


Anda dapat menambahkan header yang diperlukan menggunakan parameter ke-3 opsional dari $http.patch :

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

dokumentasi memberikan informasi tentang opsi konfigurasi khusus.

Jika Anda ingin menambahkan header khusus ke setiap permintaan secara otomatis, Anda dapat menggunakan https://docs.angularjs.org/api/ng/service/$http#interceptors :

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');
}])

EDIT: untuk menjawab komentar Anda tentang cara mendapatkan info dari permintaan GET. Di pencegat http, Anda juga dapat mencegat respons:

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
Bagaimana cara mendapatkan Data If-Match, karena harus sama dengan nilai E-Tag dari Get Response? Bagaimana saya bisa membaca nilai itu? - person Aslam; 28.10.2015
comment
Cetak objek konfigurasi di pencegat http, ini berisi semua yang Anda butuhkan - person Alexandre Nucera; 28.10.2015
comment
Saya dapat menambahkan nilai If-Match ke permintaan, tetapi masih belum jelas tentang cara mendapatkan nilai dari respons metode get - person Aslam; 28.10.2015
comment
Saya mengedit jawaban saya (dengan kode semu, saya belum mengujinya) - person Alexandre Nucera; 28.10.2015
comment
Ya, saya telah mengubah konfigurasi menjadi respons di fungsi respons, tetapi yang saya dapatkan hanyalah NULL. Saya pikir fungsi respons mendapatkan respons yang benar dari server. Ada ide? - person Aslam; 28.10.2015
comment
Apa itu nol? Objek respon berisi objek config sehingga Anda dapat melakukan respon.config.headers - person Alexandre Nucera; 28.10.2015
comment
Mari kita melanjutkan diskusi ini dalam chat. - person Aslam; 28.10.2015
comment
Ada masalah dengan solusi ini. Etag dari setiap permintaan disimpan di dalamnya. Misalnya. ada etag untuk mendapatkan file css, file html dll. Jadi saya ingin mendapatkan etag ketika pengguna melakukan metode GET untuk mendapatkan informasi pengguna dari API - person Aslam; 01.11.2015
comment
objek config berisi properti lain seperti url, jadi ubah kondisi if di fungsi permintaan agar sesuai dengan kebutuhan Anda (yaitu: menyimpan etag hanya ketika Anda mengakses url tertentu) - person Alexandre Nucera; 07.11.2015