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
.
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:
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.
@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.
data
adalah dengan menempatkan muatan di dalam badan permintaan, seperti yang Anda lakukan dengan post
.params
adalah memperlakukan muatan sebagai parameter url. Suka jika Anda mengirimaxios.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 }})
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
danparams
. Anda akan menggunakannya untuk mengirim data ke server.Cara ini:
axios.delete(URL, {params: {foo: 'bar'}})
Dalam
delete request
Anda harus menggunakanparams
alih-alihdata
, lihat dokumen:// "data" is the data to be sent as the request body
// Only applicable for request methods 'PUT', 'POST', and 'PATCH'
// When no
transformRequestis 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' },