Axios Gövde ve başlıklar ile istek silinsin mi?


105

ReactJS'de programlama yaparken Axios kullanıyorum ve sunucuma bir DELETE isteği gönderiyormuş gibi yapıyorum.

Bunu yapmak için başlıklara ihtiyacım var:

headers: {
  'Authorization': ...
}

ve vücut oluşur

var payload = {
    "username": ..
}

Ara ağlarda arama yapıyorum ve yalnızca DELETE yönteminin bir "param" gerektirdiğini ve "veri" kabul etmediğini buldum.

Bunu şu şekilde göndermeye çalışıyorum:

axios.delete(URL, payload, header);

ya da

axios.delete(URL, {params: payload}, header);

Ama hiçbir şey işe yaramıyor gibi görünüyor ...

Birisi bana hem üstbilgiler hem de gövde ile bir DELETE isteği göndermenin mümkün olup olmadığını ve bunu nasıl yapacağını söyleyebilir mi?

Şimdiden teşekkür ederim!

Yanıtlar:


128

Bu yüzden birkaç denemeden sonra işe yaradığını buldum.

Lütfen sipariş sırasını takip edin, bu çok önemli, aksi takdirde işe yaramayacak

axios.delete(URL, {
  headers: {
    Authorization: authorizationToken
  },
  data: {
    source: source
  }
});

98

axiox.deletebir istek gövdesini destekliyor. İki parametreyi kabul eder: url ve isteğe bağlı yapılandırma. config.dataİstek gövdesini ve başlıklarını aşağıdaki gibi ayarlamak için kullanabilirsiniz :

axios.delete(url, { data: { foo: "bar" }, headers: { "Authorization": "***" } });

Buraya Bakın - https://github.com/axios/axios/issues/897



75

Çeşitli http fiillerini aksiyolarla göndermek için gereken biçimlerin kısa bir özeti:

  • GET: İki yol

    • İlk yöntem

      axios.get('/user?ID=12345')
        .then(function (response) {
          // Do something
        })
      
    • İkinci yöntem

      axios.get('/user', {
          params: {
            ID: 12345
          }
        })
        .then(function (response) {
          // Do something
        })
      

    Yukarıdaki ikisi eşdeğerdir. Gözlemleyin paramsikinci yöntemde anahtar kelime.

  • POST ve PATCH

    axios.post('any-url', payload).then(
      // payload is the body of the request
      // Do something
    )
    
    axios.patch('any-url', payload).then(
      // payload is the body of the request
      // Do something
    )
    
  • DELETE

    axios.delete('url', { data: payload }).then(
      // Observe the data keyword this time. Very important
      // payload is the request body
      // Do something
    )
    

Anahtar teslimleri

  • getisteklerin isteğe bağlı olarak paramssorgu parametrelerini doğru şekilde ayarlamak için bir anahtara ihtiyacı vardır
  • deletebir gövdeye sahip istekler, bir dataanahtar altında ayarlanması gerekir

11
Cevabınız, yığın taşmasında +2 yukarı oy özelliği olmasını diledi.
eli-bd

Ayrıntılı olarak açıklayan tek cevap budur. Teşekkürler, başkalarını bile anlamamıza gerçekten yardımcı oldu.
Geoff

Gövde değil, parametrelerle silme isteği nasıl gönderilir?
Mafya

Bu soruya en iyi cevap. Teşekkür ederim.
HartleySan

1
@MaFiA, params ile silme isteği göndermek istiyorsanız. Sorgu dizelerini kullanarak URL'ye kolayca yerleştirebilirsiniz
Van_Paitin

13

axios. Silme isimli bir URL ile isteğe bağlı yapılandırma geçti .

axios.delete (url [, config])

Yapılandırmada kullanılabilen alanlar başlıkları içerebilir .

Bu, API çağrısının şu şekilde yazılabilmesini sağlar:

const headers = {
  'Authorization': 'Bearer paperboy'
}
const data = {
  foo: 'bar'
}

axios.delete('https://foo.svc/resource', {headers, data})

Bu benim için çalışmıyor ... const headers = {'Authorization': ...}data = {'username': ...}axios.delete('http://...', {headers, data})
Buldum

Tarayıcıdan çıkan istek farklı diyor. Bu Stackblitz'e ( stackblitz.com/edit/react-gq1maa ) ve ayrıca tarayıcı ağ sekmesindeki ( snag.gy/JrAMjD.jpg ) isteği görün . Burada, üstbilgileri sunucu tarafında doğru şekilde okuduğunuzdan veya isteğin durdurulup kurcalanmadığından emin olmanız gerekir.
Oluwafemi Sule

6

Aynı sorunu şu şekilde çözdüm:

axios.delete(url, {data:{username:"user", password:"pass"}, headers:{Authorization: "token"}})

5

Aslında, axios.deletebir istek gövdesini destekler.
İki parametreyi kabul eder: a URLve isteğe bağlı config. Yani...

axios.delete(url: string, config?: AxiosRequestConfig | undefined)

Silme isteği için yanıt gövdesini ayarlamak için aşağıdakileri yapabilirsiniz:

let config = { 
    headers: {
        Authorization: authToken
    },
    data: { //! Take note of the `data` keyword. This is the request body.
        key: value,
        ... //! more `key: value` pairs as desired.
    } 
}

axios.delete(url, config)

Umarım bu birine yardımcı olur!


1
Teşekkürler, bunu nestJs HttpService silme yöntemimde şu şekilde kullanıyorum: this.httpService.delete (apiUrl, {headers: headersRequest, data: deleteBody})
shanti

4

Silme için aşağıdakileri yapmanız gerekecek

axios.delete("/<your endpoint>", { data:<"payload object">})

Benim için çalıştı.


2

Bunu axiosyaptım aracılığıyla bazı başlıklarla bir HTTP SİLİNMESİ göndermek için :

  const deleteUrl = "http//foo.bar.baz";
  const httpReqHeaders = {
    'Authorization': token,
    'Content-Type': 'application/json'
  };
  // check the structure here: https://github.com/axios/axios#request-config
  const axiosConfigObject = {headers: httpReqHeaders}; 

  axios.delete(deleteUrl, axiosConfigObject);

axiosBazen 2 parametre HTTP gövde, diğer bazı zamanlar (gerekli olmayabileceği) sadece 2 parametre olarak başlıklarını geçmesi olması gerekiyordu çünkü farklı HTTP fiilleri (GET, POST, PUT, DELETE) sözdizimi zordur .

Ancak diyelim ki HTTP gövdesi olmadan bir HTTP POST isteği göndermeniz gerekiyor, o zaman undefined2. parametre olarak geçmeniz gerekiyor .

Yapılandırma nesnenin tanımına göre (akılda Çıplak https://github.com/axios/axios#request-config ) hala üzerinden HTTP çağrısı bir HTTP gövdesini geçebilir dataçağrılırken alanında axios.deleteHTTP için ancak, DELETE fiil yok sayılacaktır.

2. parametrenin bazen HTTP gövdesi ve diğer zamanlarda tüm confignesnenin olması arasındaki bu karışıklık axios, HTTP kurallarının nasıl uygulandığından kaynaklanmaktadır. Bazen bir HTTP çağrısının geçerli sayılması için bir HTTP gövdesine gerek yoktur.


0

Aynı problemle karşılaştım ... Özel bir axios örneği oluşturarak çözdüm. ve bunu kimliği doğrulanmış bir silme isteği yapmak için kullanmak ..

const token = localStorage.getItem('token');
const request = axios.create({
        headers: {
            Authorization: token
        }
    });

await request.delete('<your route>, { data: { <your data> }});

0

Yukarıdakilerin hepsini denedim, benim için işe yaramadı. Sonunda PUT (ilham burada bulundu ) ile bitirdim ve bu url çağrısında bir silme işlemi gerçekleştirmek için sunucu tarafı mantığımı değiştirdim. (django dinlenme çerçeve işlevi geçersiz kılma).

Örneğin

.put(`http://127.0.0.1:8006/api/updatetoken/20`, bayst)
      .then((response) => response.data)
      .catch((error) => { throw error.response.data; });

-1

işe yarayan bir yol buldum:

axios
      .delete(URL, {
        params: { id: 'IDDataBase'},
        headers: {
          token: 'TOKEN',
        },
      }) 
      .then(function (response) {
        
      })
      .catch(function (error) {
        console.log(error);
      });

Umarım bu senin için de çalışır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.