Sie haben Server allright erstellt, aber es gibt zwei Probleme:
- Anschluss Endpunkt. Ihr AJAX ist
POST
, also müssen Sie POST
Anfragen richtig analysieren (nicht genau löst Ihr Problem, aber Sie müssen Anfragemethoden unterscheiden).
- Node.js analysiert nicht standardmäßig Ihre
POST
Körper, müssen Sie ihm sagen, wie es gemacht wird, zum Beispiel mit querystring
Modul.
In Kombination zusammen:
var qs = require('querystring');
http.createServer(function(req, res) {
if (request.method == 'POST') {
var body = '';
request.on('data', function(data) {
body += data;
});
request.on('end', function() {
var post = qs.parse(body);
// Use your POST here
console.log(post);
});
}
}).listen(3000);
JSON-Daten - sauberere Lösung:
Sie benötigen eine AJAX-Daten mit JSON
zu kodieren, und als es auf der Server-Seite zu analysieren wie folgt:
http.createServer(function(req,res) {
if (req.method == 'POST') {
var jsonPost = '';
req.on('data', function(data) {
jsonPost += data;
});
req.on('end', function() {
var post = JSON.parse(jsonPost);
// Use your POST here
console.log(post);
});
}
}).listen(3000);
Sie wären noch besser dran mit Express.js Framework dafür, mit seinem bodyParser
Modul.
UPDATE - Wie chunks gepuffert werden:
Betrachten einfaches Beispiel - sende in xhr.send()
eine LARGE Textmengen, die Content-Length
überschreitet. folgend auf data
Ereignis als zu tun:
req.on('data', function(data) {
console.log(data);
body += data;
});
Sie werden sehen, so etwas wie:
<Buffer 0a 0a 4c 6f 72 65 6d 20 69 70 73 75 6d 20 64 6f 6c 6f 72 20 73 69 74 20 61 6d 65 74 2c 20 63 6f 6e 73 65 63 74 65 74 75 72 20 61 64 69 70 69 73 63 69 ... >
<Buffer 65 74 20 71 75 61 6d 20 63 6f 6e 67 75 65 20 6c 6f 62 6f 72 74 69 73 2e 20 50 65 6c 6c 65 6e 74 65 73 71 75 65 20 74 65 6d 70 75 73 20 75 6c 6c 61 6d ... >
<Buffer 61 2e 20 56 69 76 61 6d 75 73 20 76 69 74 61 65 20 61 6e 74 65 20 6d 65 74 75 73 2e 20 4d 61 75 72 69 73 20 71 75 69 73 20 61 6c 69 71 75 65 74 20 65 ... >
Das zeigt, dass die Daten in Blöcken empfingen am data
Ereignisse. Nur unter end
Ereignis erhalten Sie die gesamten Daten gesendet (wenn Sie es zuvor aggregiert haben). Node.js behandelt das nicht, deshalb benötigen Sie Module von Drittanbietern.
Das ist - Sie können nicht einfach req.body
der Anfrage erhalten, als wurde es überhaupt nicht gesetzt.
Haben Sie eine Route für ''/'' definiert? – abdulbarik
@abdulbarik danke, ich denke, http.createServer wird jede Anfrage erhalten. Egal auf welcher Route. – suoyong