2016-12-20 3 views
0

Ich hätte gedacht, dass dies eine triviale Frage war, und dass die Antwort "im Körper" sein würde ... doch scheint es nicht der Fall zu sein.Wo befinden sich POST-Payload-Informationen im Anfrageobjekt?

dieses Beispiel nehmen, wo wir eine Website, die Daten sammeln und dann einen POST an einen Zuhörer Website senden, die die Informationen erhalten:

Hier ist der HTML-Code für die POST-Website:

<html> 
 
<head> 
 
<title>Form POST Site</title> 
 
<script type="text/javascript"> 
 
function submitForm(){document.getElementById('form1').action = document.getElementById('server').value;} 
 
</script> 
 
<style type="text/css"> 
 
.style1 {width: 100%;} 
 
.style2 {width: 429px;} 
 
#server { width: 254px; } 
 
</style> 
 
</head> 
 
<body> 
 
<H3>Form POST Site</H3> 
 
<form method="POST" id="form1" onSubmit="submitForm()"> 
 
<table class="style1"> 
 
<tr> 
 
<td class="style2"> 
 
Username:</td> 
 
<td> 
 
<input type="text" name="username" value="" /></td> 
 
</tr> 
 
<tr> 
 
<td class="style2"> 
 
Server: </td> 
 
<td> 
 
<input type="text" id="server" name="server" value="http://" /></td> 
 
</tr> 
 
<tr> 
 
<td class="style2"> 
 
<input type="submit" name="submittable" value="Go" /></td> 
 
<td> 
 
</td> 
 
</tr> 
 
</table> 
 
</form> 
 
</body>

Und hier ist der node.js Code für die Zuhörer Website:

/*global require,console*/ 
 

 
var xml = require('xml'); 
 
var express = require('express'); 
 
var bodyParser = require ('express-xml-bodyparser'); 
 
var app = express(); 
 

 
app.use(bodyParser()); // add a middleware (so that express can parse request.body's json) 
 

 
app.post('/', (request, response) => { 
 
    /*response.send(request.body);*/ 
 
    console.log(request.body); 
 
    response.json("received"); 
 
}); 
 

 
app.listen(1123);

So Zugriff auf die POST-Website und zum Einstellen der IP-Adresse des Zuhörers als Ziel, können wir sehen, genau das, was gesendet wird.

Und das ist was mich verwirrt. Der request.body ist leer.

Nicht nur das, wenn ich auf die Gesamtheit der Anfrage schaue, sehe ich nicht den Textwert, den ich für "Benutzername" irgendwo eingegeben habe.

Ich möchte in der Lage sein, die Zeichenfolge "Benutzername" in meinem node.js Code zu erhalten und etwas damit zu tun ... aber ich weiß nicht, wo ich es finden kann.

Jede Hilfe wäre sehr willkommen.

+0

Ok. Also ich verstehe das. Aber egal, welchen Body-Parser ich benutze (und ich habe zwei verschiedene Versionen ausprobiert), ich bekomme immer noch leere Körperwerte ... – rucker

+0

In deinem Fall postest du einen URL-kodierten Körper. Um zu analysieren, müssen Sie ' app.use verwenden (bodyParser.urlencoded ({extended: false}))' –

+1

Ich habe gerade festgestellt, dass Sie 'express-xml-bodyparser' verwenden, nicht' body-parser'. Deshalb ist 'request.body' leer. –

Antwort

1

Im Allgemeinen ist request.body leer. body-parser (oder wahrscheinlich verwandte Module) analysiert den Anfragetext, abhängig vom Inhaltstyp und der Komprimierung, und setzt den Text in request.body.

Sie express-xml-bodyparser verwenden, die xml in POST, aber nicht die regulären form Daten in der Regel url-encoded analysieren kann. So können Sie body-parser verwenden und die form Felder erhalten.

z.B.

var xml = require('xml'); 
var express = require('express'); 
var xmlbodyParser = require ('express-xml-bodyparser'); 
var bodyParser = require('body-parser'); 
var app = express(); 


app.use(xmlbodyParser()); // add a middleware (so that express can parse request.body's xml) 
app.use(bodyParser.urlencoded({ extended: false })) //add a middle (so that express can parse request.body's urlencoded dataa) 

app.post('/', (request, response) => { 
    /*response.send(request.body);*/ 
    console.log(request.body); 
    response.json("received"); 
}); 

app.listen(1123); 
Verwandte Themen