webentwicklung-frage-antwort-db.com.de

Axios POST Anfrage schlägt mit Fehlerstatuscode 500 fehl: Interner Serverfehler

Ich versuche, eine POST - Anfrage lokal mit einem Benutzernamen und einem Passwort im Text über Axios zu senden.

Ich stelle eine Flask - App auf http://127.0.0.1:5000/login bereit, die die/login-Route verwaltet. Die Anforderung POST schlägt mit dem folgenden Fehler fehl

POST http://127.0.0.1:5000/login 500 (INTERNAL SERVER ERROR)
Error: Request failed with status code 500
    at createError (createError.js:16)
    at settle (settle.js:18)
    at XMLHttpRequest.handleLoad (xhr.js:77)

Ich habe ein bisschen recherchiert und dachte, es könnte ein Problem mit CORS sein, aber dies scheint nicht der Fall zu sein, da ich eine Axios GET-Anfrage ausprobiert habe und es gut funktioniert hat (Antwort richtig protokolliert). Hier ist ein Teil meines Codes

axios.get("http://127.0.0.1:5000").then(function(response) {
        console.log(response);
      }).catch(function(error) {
        console.log(error);
      })
axios.post("http://127.0.0.1:5000/login", {
        username: this.state.username,
        password: this.state.password
      }).then(function(response) {
        console.log(response);
      }).catch(function(error) {
        console.log(error);
      })

Wenn ich mir Chrome DevTools ansehe, kann ich sehen, dass die Nutzdaten der POST - Anforderung ordnungsgemäß ausgefüllt sind. Ich habe dann versucht, die Schlüssel serverseitig in der App Flask mit dem folgenden Code auszudrucken, aber ich habe nichts, leer. (was erwartet wurde, da die Anforderung POST fehlgeschlagen ist)

dict = request.form
    for key in dict:
        print('form key '+dict[key])

Die Verwendung von Postman mit den entsprechenden Schlüsseln und Werten funktioniert jedoch ordnungsgemäß und gibt eine Antwort zurück und druckt die Schlüssel aus (siehe oben). Woher kommt der Fehler? Warum schlägt die Anforderung POST fehl, wenn ein GET anscheinend einwandfrei funktioniert?

10
M Xiao

Anscheinend hat Axios das rohe JSON-Objekt nicht freundlich aufgenommen

{username: this.state.username, password: password} 

die Übergabe der Daten an ein FormData-Objekt schien jedoch einwandfrei zu funktionieren.

4
M Xiao

Also blieb ich auch im selben Problem stecken und die Lösung, die ich fand, war ungefähr so:

let data = JSON.stringify({
  username: this.state.username,
  password: password
});

const response = axios.post(url,data,{headers:{"Content-Type" : "application/json"}});

Diese Lösung hat bei mir funktioniert.

1
Aman Singh