<p>axios.delete - harus menentukan objek 'data'?</p>

Dibuat pada 3 Mar 2017  ·  22Komentar  ·  Sumber: axios/axios

Saat menggunakan alias axios.delete , payload tidak dikirim dengan panggilan API jika Anda tidak menentukan data .

Kamu harus melakukan:

axios.delete(URL, {
 data: { foo: 'bar' }
})

dari pada

axios.delete(URL, { foo: 'bar' })

Menurut this , Anda tidak perlu mendefinisikan data . Saya dapat menggunakan metode lain dengan payload tanpa menentukan data .

Komentar yang paling membantu

Tidak, ini tidak akan berhasil.

Apa yang harus Anda berikan ke Axios adalah Objek Konfigurasi Permintaan dan di objek ini Anda dapat menemukan properti data dan params . Anda akan menggunakannya untuk mengirim data ke server.

Cara ini: axios.delete(URL, {params: {foo: 'bar'}})


Dalam delete request Anda harus menggunakan params alih-alih data , lihat dokumen:

// "data" is the data to be sent as the request body
// Only applicable for request methods 'PUT', 'POST', and 'PATCH'
// When no transformRequest is set, must be of one of the following types:
// - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
// - Browser only: FormData, File, Blob
// - Node only: Stream

data: { firstName: 'Fred' },

Semua 22 komentar

Tidak, ini tidak akan berhasil.

Apa yang harus Anda berikan ke Axios adalah Objek Konfigurasi Permintaan dan di objek ini Anda dapat menemukan properti data dan params . Anda akan menggunakannya untuk mengirim data ke server.

Cara ini: axios.delete(URL, {params: {foo: 'bar'}})


Dalam delete request Anda harus menggunakan params alih-alih data , lihat dokumen:

// "data" is the data to be sent as the request body
// Only applicable for request methods 'PUT', 'POST', and 'PATCH'
// When no transformRequest is set, must be of one of the following types:
// - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams
// - Browser only: FormData, File, Blob
// - Node only: Stream

data: { firstName: 'Fred' },

@charlesrochati saya bingung. params adalah mengirim parameter string kueri, bukan itu yang saya lakukan.
Adapun apa yang Anda kutip di atas, ia tidak mengatakan apa-apa tentang delete .

params adalah mengirim parameter string kueri, bukan itu yang saya lakukan.

Jika Anda ingin membuat axios.delete , itulah yang harus Anda lakukan.

Anda tidak menggunakan axios.delete(URL, {
data: { foo: 'bar' } //Hanya berlaku untuk metode permintaan 'PUT', 'POST', dan 'PATCH'
})
untuk permintaan penghapusan, Anda akan menggunakan axios.delete(URL, {
params: { foo: 'bar' }
})

Anda akan mengirim data sebagai badan permintaan HANYA KETIKA Anda menggunakan 'PUT', 'POST', dan 'PATCH'.

Saya khawatir Anda menggunakan axios.delete seperti axios.post atau ( axios.put atau axios.patch ). Saat menggunakan axios.delete , Anda akan mengirim id ke server, dan server itu sendiri akan menemukan resource yang cocok dengan yang diberikan id , hanya kemudian itu akan dihapus (atau memicu beberapa tindakan, tetapi permintaan dipetakan sebagai http delete ).

Dengan menggunakan axios.delete(URL, {
data: { foo: 'bar' }
}) Anda mengirim resource , yang tidak masuk akal sama sekali.

Lihatlah tautan di bawah ini, Anda akan memiliki pemahaman yang lebih baik:

http://stackoverflow.com/questions/12142652/what-is-the-usefulness-of-put-and-delete-http-request-methods

https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html [Bagian 9.7]

Metode HTTP DELETE tidak boleh memiliki badan permintaan. DELETE memberi tahu server asal untuk menghapus sumber daya yang diidentifikasi oleh URI.

Dalam kasus saya, saya juga memberikan muatan. Tetapi bagaimanapun juga, jika berfungsi menggunakan data , itu akan berfungsi menggunakan steno.

EDIT: Spesifikasi tidak melarang/melarang melewatkan muatan.

Tidak ada singkatan untuk axios.delete:

axios.request(config)

axios.get(url[, konfigurasi])

axios.delete(url[, konfigurasi])

axios.head(url[, konfigurasi])

axios.post(url[, data[, konfigurasi]])

axios.put(url[, data[, konfigurasi]])

axios.patch(url[, data[, konfigurasi]])

@AkiraLaine spesifikasinya juga tidak melarang pengiriman badan permintaan untuk GET. Haruskah axios juga mengizinkan Anda menggunakan notasi singkat untuk mengirim badan permintaan dalam permintaan GET juga?

Saya menutup masalah karena itu adalah perilaku yang diharapkan.

@rubennorte Saya pikir kita harus mendukung body di DEL
HTTP 1.1
Dan misalnya, Elastis

@cggaurav didukung.

axios.delete('/some/uri', { body: 'my delete body' })

Di samping catatan, Di server id muncul di req.query alih-alih req.params saat menggunakan axios.delete('/some/uri', {params: { id: 1 } }) seperti ini. Hanya ingin membuang itu di luar sana.

@aricsangchat itu mungkin karena Anda menggunakan express yang tidak berafiliasi dengan axios sama sekali. Ketika express merujuk ke params itu berbicara tentang nilai dinamis yang cocok dengan jalur permintaan. Ketika axios merujuk ke params itu merujuk ke parameter string kueri.

// Express
router.get('/:foo/:bar', (req, res) => {
  res.json({
    query: req.query,
    params: req.params
  })
})
// Axios
axios.get('/some/uri', { params: { id: 1 } })
.then((response) => console.log(response.data))

Output yang akan Anda dapatkan dari menjalankan itu adalah:

{
  "query": { "id": 1 },
  "params": {
    "foo": "some",
    "bar": "uri"
  }
}

@jcready Yup itu pengaturan kami.

Di mana tertulis bahwa hapus tidak dapat memiliki tubuh (seperti posting)? Alangkah baiknya jika axios mendukung ini https://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-19#page -23

Terima kasih

FYI. Poin adil bahwa DELETE seharusnya tidak memiliki tubuh. Namun, terkadang Anda terjebak harus mengirim badan saat api berada di luar kendali Anda. misalnya
https://auth0.com/docs/api/authorization-extension#remove -user-from-roles

@duhseekoh

const extension_url = 'mycompany.auth0.com'
const access_token = 'abc123'
const user_id = 12345
const role_id = 67890

axios.delete(`https://${extension_url}/users/${role_id}/roles`, {
  headers: {
    'Authorization': `Bearer ${access_token}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify([
    user_id
  ])
})

@jcready - Pasti dan terima kasih untuk contohnya. Hanya ingin menambahkan beberapa alasan mengapa badan mungkin perlu diteruskan DELETE saat menggunakan axios.

@duhseekoh Mungkin ini akan membantu: https://github.com/axios/axios/issues/897#issuecomment -343715381

const response = await axios.delete('/api/matches/delete_match', {
        data: { matchInfo }
    });

Saya membuatnya bekerja dengan data tetapi tidak bekerja dengan params dengan versi "axios": "^0.17.1"

@quinnliu Saya pikir memilih untuk menggunakan data atau params tergantung pada bagaimana backend Anda menangani permintaan.

  • Menggunakan data adalah dengan menempatkan muatan di dalam badan permintaan, seperti yang Anda lakukan dengan post .
  • Menggunakan params adalah memperlakukan muatan sebagai parameter url. Suka jika Anda mengirim
axios.delete(URL, {
 params: { foo: 'bar' }
})

itu sama dengan mengirim permintaan ke URL?foo=bar.

Abstraksi dari aksio di api. Params dalam data: nama saja
`` api.delete( /projects/${idProjectTech}/techs`, {data: { name: data.name }})

Apakah halaman ini membantu?
0 / 5 - 0 peringkat