<p>axios.delete - muss 'data'-Objekt angeben?</p>

Erstellt am 3. März 2017  ·  22Kommentare  ·  Quelle: axios/axios

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.

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 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' },

Alle 22 Kommentare

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:

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 [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.

@rubennorte Ich denke, wir sollten body in DEL unterstützen
HTTP 1.1
Und zum Beispiel Elastic

@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.

  • Die Verwendung data dient dazu, die Nutzlast in den Anforderungstext einzufügen, genau wie Sie es mit post tun.
  • Die Verwendung params dient dazu, Payloads als URL-Parameter zu behandeln. Gefällt mir, wenn Sie senden
axios.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 }})

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen