Die Axios- POST
Anforderung trifft die URL auf dem Controller, setzt jedoch Nullwerte für meine POJO-Klasse. Wenn ich Entwicklertools in Chrome durchlaufe, enthält die Nutzlast Daten. Was mache ich falsch?
Axios POST Anfrage:
var body = {
userName: 'Fred',
userEmail: '[email protected]'
}
axios({
method: 'post',
url: '/addUser',
data: body
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
Browser-Antwort:
Wenn ich Header wie folgt setze:
headers:{
Content-Type:'multipart/form-data'
}
Die Anfrage löst den Fehler aus
Fehler beim Posten von mehrteiligen / Formulardaten. In der Kopfzeile des Inhaltstyps fehlt die Grenze
Wenn ich dieselbe Anfrage beim Postboten mache, funktioniert sie einwandfrei und setzt Werte für meine POJO-Klasse.
Kann jemand erklären, wie man Grenzen setzt oder wie ich Formulardaten mit Axios senden kann.
quelle
set
{ method: 'post', url: 'myurl', data: bodyFormData, headers: {'Content-Type': 'multipart/form-data' } }
Überprüfen Sie den Querystring .
Sie können es wie folgt verwenden:
quelle
In meinem Fall musste ich die Grenze wie folgt zum Header hinzufügen :
Diese Lösung ist auch nützlich, wenn Sie mit React Native arbeiten.
quelle
FormData._boundary
ist sowohl in Chrome 76 als auch in Firefox 67 undefiniert, und axios löscht den Content-Type-Header ohnehin , sodass dies keine Auswirkungen haben sollte.Laden Sie (mehrere) Binärdateien hoch
Node.js
Dinge werden kompliziert, wenn Sie Dateien über
multipart/form-data
, insbesondere mehrere Binärdateien, veröffentlichen möchten . Unten ist ein Arbeitsbeispiel:headers: {'Content-Type': 'multipart/form-data' }
mir lieberheaders: formData.getHeaders()
async
undawait
höher, Sie können sie in einfache Promise-Anweisungen ändern, wenn Sie sie nicht mögenNeu hinzugefügter Inhalt unten:
Browser
Browser
FormData
unterscheidet sich vom NPM-Paket 'Formulardaten'. Der folgende Code funktioniert für mich im Browser:HTML:
JavaScript:
quelle
concat-stream
, indem ichasync
await
for(var x = 0; x<this.state.files.length; x++) { formData.append('files[]', this.state.files[x]) }
axios.post(url, formData, config)
Noch einfacher:
quelle
Verwenden des Anwendungsformats / x-www-form-urlencoded in axios
Browser
In einem Browser können Sie die URLSearchParams-API wie folgt verwenden:
Beachten Sie, dass URLSearchParams nicht von allen Browsern unterstützt wird (siehe caniuse.com), es jedoch eine Polyfüllung gibt (stellen Sie sicher, dass die globale Umgebung mehrfach gefüllt ist).
Alternativ können Sie Daten mithilfe der qs-Bibliothek codieren:
Oder auf andere Weise (ES6),
quelle
2020 ES6 Vorgehensweise
Mit dem Formular in HTML habe ich Daten wie folgt eingebunden:
DATEN:
onSubmit:
quelle
Die obige Methode hat bei mir funktioniert, aber da ich sie oft brauchte, habe ich eine grundlegende Methode für flache Objekte verwendet. Beachten Sie, dass ich auch Vue und nicht REACT verwendet habe
Das hat bei mir funktioniert, bis ich auf komplexere Datenstrukturen mit verschachtelten Objekten und Dateien gestoßen bin, die dann auf Folgendes lauten
quelle
objectToFormData
zupackageData
oder umgekehrtquelle