2017-06-16 2 views
1

Ich war Tring, um einen API-POST mit Node.js und Express zu erstellen. Ich habe nur versucht, einige Daten zu schreiben html-Formular:HTML Formular Anfrage Körper leer - NodeJs

<form id="myform" action="http://localhost:4000/add" method="post" enctype="application/json"> 
    <input type="text" name="name" id="name" /> 
    <input type="submit" id="submit" /> 
</form> 

Der Server würde nur die POST-Anforderung erhalten und den Körper in console.log anzuzeigen.

router.post('/add', function (req, res){ 
    console.log("request: "+JSON.stringify(req.body)); 
}) 

Was an der Konsole empfangen wird ist: Anfrage: {}

Der Versuch, in die gleiche api Postman schreiben mit - roh, JSON (application/JSON), die Dinge funktionieren.

Kann mir bitte jemand sagen, was ist los mit dem, was ich mache?

+0

Die Frage wurde zuvor gestellt: https://stackoverflow.com/questions/4295782/how-do-you-extract-post-data-in-node-js –

Antwort

2

Browser unterstützen das Einreichen von HTML-Formularen nicht als Anwendung/json. Die meisten Browser würden den Wert wahrscheinlich ignorieren und das Formular als Standard enctype senden, das ist application/x-www-form-urlencoded. Um dies zu analysieren, müssen Sie eine geeignete Middleware verwenden. Ein solches Beispiel ist das urlencoded() middleware des Moduls body-parser.

+0

Großartig! Danke, habe mein Problem gelöst: Ich habe 'app.use (bodyParser.urlencoded ({extended: false}))' zusätzlich zum json body-parser hinzugefügt, den ich bereits hatte. – Zaphoid

0

In Aktion Attribut, das Sie nicht auf bestimmte brauchen die Host angeben Pfad nur wie „/add“.

+0

Das ist nur wahr, wenn Sie vom selben Server anrufen (zB wenn html-Datei auch auf localhost steht). – Zaphoid