2017-06-28 4 views
2

Ich versuche, eine POST-Operation für eine JSON-Datei durchzuführen, die von einem json-Server im Knoten bedient wird. Ich erhalte die folgenden 500-Fehler beim Versuch, die POST-Operation auszuführen:Ich kann keine POST-Anforderung mit Abruf in reaktivem nativen ausführen

„Typeerror: kann Eigenschaft‚id‘undefinierter bei Function.createId lesen“

Die nach der Operation ist wie folgt:

pushState =() => { 
     var update = { 
      "a": 1, 
      "b": 2 
     }; 

    return fetch(url, { 
     mode: 'cors', 
     method: 'POST', 
     headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json', 
     }, 
     body: JSON.stringify(update) 
    }) 
    .then((response) => { 
     console.log(response); 
     response.text(); 
    }) 
    .then((responseData) => { 
     console.log("Response:",responseData); 
    }).catch((error) => { 
     console.log(error); 
    }) 
    .done(); 
    } 

Mache ich die POST-Anfrage korrekt?

Edit: Nach Asynchron-Zugabe und erwarte ich bin immer noch die gleichen Fehler:

pushState = async() => { 
    var update = { 
    "a": 1, 
    "b": 2 
    }; 

    var result = await fetch(url, { 
    mode: 'cors', 
    method: 'POST', 
    headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json', 
    }, 
    body: JSON.stringify(update) 
    }) 
    .then((response) => { 
    console.log(response); 
    return response; 
    }) 
    .catch((error) => { 
    console.log(error); 
    }); 

    return result; 
} 
+1

Ich denke, es könnte ein Serverproblem sein, versuchen Sie, eine ID mit Update zu übergeben? 'var update = {id: 1, a: 1, b: 2};' –

+0

Hinzufügen und ID-Feld funktioniert! Gibt es einen Grund, warum das ID-Feld benötigt wird? Was passiert, wenn die API, die ich anrufe, kein ID-Feld oder ein anders benanntes ID-Feld hat? –

+1

Ich glaube, es ist nur, weil Sie json-server verwenden und die Art und Weise, die eingerichtet ist, nach einer ID zu suchen, weshalb es sagte "TypeError: Kann Eigenschaft 'id' von undefined bei Function.createId nicht lesen". Nicht alle APIs benötigen IDs, aber es ist eine gute Praxis, IDs zu verwenden, um Daten besser zu verfolgen. –

Antwort

2

Zwei Themen hier:

  1. Sie sind nicht alles von fetch zurück.
  2. fetch ist asynchron. Mit der Art und Weise, wie Sie es jetzt mit aufrufen, ein Ergebnis sofort zurücksendend, wird es fast immer undefined zurückgeben, wie Sie Ihren Fehler bekommen. Sie müssen pushState mit async/await schreiben.

Kommentare bearbeiten zu beantworten:

Da Sie die Funktion Pfeil-Syntax verwenden, pushState asynchron machen würde wie folgt aussehen:

pushState = async() => { /* code */ } 

Ihnen dabei helfen zu verstehen, wie fetch funktioniert, ich Lesung empfehlen this first. Um async zu verstehen und auf hohem Niveau zu warten, lesen Sie this article. Ihr resultierender Code sieht ungefähr so ​​aus:

+0

Also würde ich es "async pushState()" machen, richtig? Und wie würde ich verwenden erwarten? –

+0

@BillyBobJoel Bearbeitet, um hoffentlich Ihre Fragen zu beantworten. –

+0

Ich habe den aktualisierten Code hinzugefügt. Ich bekomme immer noch den gleichen Fehler. Könnte das Problem der Art sein, wie ich die JSON-Datei diene? –

Verwandte Themen