Wenn Sie den Alias axios.delete
verwenden, wird die Nutzlast nicht mit dem API-Aufruf gesendet, wenn Sie data
nicht angeben.
Du musst:
axios.delete(URL, {
data: { foo: 'bar' }
})
anstatt
axios.delete(URL, { foo: 'bar' })
Dementsprechend sollten Sie data
nicht definieren müssen. Ich konnte andere Methoden mit Payload verwenden, ohne data
anzugeben.
Nein, das wird nicht funktionieren.
Was Sie an Axios übergeben müssen, ist ein Request Config Object und in diesem Objekt finden Sie die Eigenschaften data
und params
. Sie werden sie verwenden, um Daten an den Server zu senden.
Auf diese Weise: axios.delete(URL, {params: {foo: 'bar'}})
In einem delete request
sollten Sie params
anstelle von data
verwenden, siehe Dokumentation:
// "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 Ich bin verwirrt. params
dient zum Senden von Abfragezeichenfolgenparametern, das mache ich nicht.
Was Sie oben zitiert haben, sagt nichts über delete
aus.
params besteht darin, Abfragezeichenfolgenparameter zu senden, das mache ich nicht.
Wenn Sie ein axios.delete
machen wollen, ist das genau das, was Sie tun müssen.
Sie verwenden nicht axios.delete(URL, {
data: { foo: 'bar' }
//Nur anwendbar für die Anfragemethoden 'PUT', 'POST' und 'PATCH'
})
für eine Löschanforderung verwenden Sie axios.delete(URL, {
params: { foo: 'bar' }
})
Sie werden NUR DANN Daten als Anfragetext senden, WENN Sie „PUT“, „POST“ und „PATCH“ verwenden.
Ich fürchte, Sie verwenden axios.delete
genau wie axios.post
oder ( axios.put
oder axios.patch
). Wenn Sie axios.delete
verwenden, senden Sie ein id
an einen Server, und der Server selbst findet erst dann ein resource
, das mit dem angegebenen id
übereinstimmt sie wird entfernt (oder eine Aktion auslösen, aber die Anfrage wird als http delete
abgebildet).
Durch die Verwendung von axios.delete(URL, {
data: { foo: 'bar' }
})
Sie senden resource
, was überhaupt keinen Sinn ergibt.
Schauen Sie sich die folgenden Links an, Sie werden es besser verstehen:
https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html [Abschnitt 9.7]
Die HTTP DELETE-Methode sollte keinen Anforderungstext haben. DELETE weist den Ursprungsserver an, die durch den URI identifizierte Ressource zu entfernen.
In meinem Fall gebe ich auch eine Nutzlast an. Aber so oder so, wenn es mit data
funktioniert, sollte es mit der Kurzschrift funktionieren.
BEARBEITEN: Die Spezifikation verbietet/verbietet das Übergeben einer Nutzlast nicht.
Es gibt keine Abkürzung für axios.delete:
axios.request(config)
axios.get(url[, config])
axios.delete(url[, config])
axios.head(url[, config])
axios.post(url[, data[, config]])
axios.put(url[, data[, config]])
axios.patch(url[, data[, config]])
@AkiraLaine Die Spezifikation verbietet auch nicht das Senden von Anforderungstexten für GET. Sollte axios es Ihnen auch ermöglichen, die Kurzschreibweise für das Senden von Anforderungskörpern auch in GET-Anforderungen zu verwenden?
Ich schließe das Problem, da es das erwartete Verhalten ist.
@cggaurav es wird unterstützt.
axios.delete('/some/uri', { body: 'my delete body' })
Nebenbei bemerkt, auf dem Server wird die ID in req.query anstelle von req.params angezeigt, wenn axios.delete('/some/uri', {params: { id: 1 } }) wie folgt verwendet wird. Wollte das nur rauswerfen.
@aricsangchat Das liegt wahrscheinlich daran, dass Sie Express verwenden, das überhaupt nicht mit Axios verbunden ist. Wenn sich Express auf params
bezieht, handelt es sich um dynamische Werte, die im Anforderungspfad übereinstimmen. Wenn axios auf params
verweist, bezieht es sich auf Abfragezeichenfolgenparameter.
// 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))
Die Ausgabe, die Sie erhalten würden, wenn Sie das ausführen, wäre:
{
"query": { "id": 1 },
"params": {
"foo": "some",
"bar": "uri"
}
}
@jready Ja, das ist unser Setup.
Wo steht geschrieben, dass delete keinen Körper haben kann (wie post)? Es wäre schön, wenn Axios diese https://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-19#page -23 unterstützt
Danke
FYI. Faire Punkte, dass DELETE keinen Körper haben sollte. Manchmal stecken Sie jedoch fest, wenn Sie einen Körper senden müssen, wenn die API außerhalb Ihrer Kontrolle liegt. z.B
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
])
})
@jready - Auf jeden Fall und danke für das Beispiel. Ich wollte nur eine Begründung dafür hinzufügen, warum ein Körper möglicherweise an DELETE übergeben werden muss, wenn Axios verwendet werden.
@duhseekoh Vielleicht hilft das: https://github.com/axios/axios/issues/897#issuecomment -343715381
const response = await axios.delete('/api/matches/delete_match', {
data: { matchInfo }
});
Ich habe es mit data
funktioniert, aber nicht mit params
mit Version "axios": "^0.17.1"
@quinnliu Ich denke, die Verwendung data
oder params
hängt davon ab, wie Ihr Backend die Anfrage verarbeitet.
data
dient dazu, die Nutzlast in den Anforderungstext einzufügen, genau wie Sie es mit post
tun.params
dient dazu, Payloads als URL-Parameter zu behandeln. Gefällt mir, wenn Sie sendenaxios.delete(URL, {
params: { foo: 'bar' }
})
es ist dasselbe wie das Senden einer Anfrage an URL?foo=bar.
Abstraktion von Axios in api. Parameter in Daten: nur Name
``
api.delete(
/projects/${idProjectTech}/techs`, {data: { name: data.name }})
Hilfreichster Kommentar
Nein, das wird nicht funktionieren.
Was Sie an Axios übergeben müssen, ist ein Request Config Object und in diesem Objekt finden Sie die Eigenschaften
data
undparams
. Sie werden sie verwenden, um Daten an den Server zu senden.Auf diese Weise:
axios.delete(URL, {params: {foo: 'bar'}})
In einem
delete request
sollten Sieparams
anstelle vondata
verwenden, siehe Dokumentation:// "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' },