Servidor Node.js que aceita solicitações POST

Estou tentando permitir que o javascript se comunique com um servidor Node.js.

Pedido POST (Javascript)

var http = new XMLHttpRequest(); var params = "text=stuff"; http.open("POST", "http://someurl.net:8080", true); http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); http.setRequestHeader("Content-length", params.length); http.setRequestHeader("Connection", "close"); alert(http.onreadystatechange); http.onreadystatechange = function() { if (http.readyState == 4 && http.status == 200) { alert(http.responseText); } } http.send(params); 

Neste momento, o código do servidor Node.js se parece com isso. Antes de ser usado para solicitações GET. Não sei como fazer isso funcionar com solicitações POST.

Servidor (Node.js)

 var server = http.createServer(function (request, response) { var queryData = url.parse(request.url, true).query; if (queryData.text) { convert('engfemale1', queryData.text, response); response.writeHead(200, { 'Content-Type': 'audio/mp3', 'Content-Disposition': 'attachment; filename="tts.mp3"' }); } else { response.end('No text to convert.'); } }).listen(8080); 

Agradeço antecipadamente por sua ajuda.

O código a seguir mostra como ler valores de um formulário HTML. Como @pimvdb disse que você precisa usar o request.on (‘data’ …) para capturar o conteúdo do corpo.

 http = require('http'); fs = require('fs'); server = http.createServer( function(req, res) { console.dir(req.param); if (req.method == 'POST') { console.log("POST"); var body = ''; req.on('data', function (data) { body += data; console.log("Partial body: " + body); }); req.on('end', function () { console.log("Body: " + body); }); res.writeHead(200, {'Content-Type': 'text/html'}); res.end('post received'); } else { console.log("GET"); //var html = '
Name:
'; var html = fs.readFileSync('index.html'); res.writeHead(200, {'Content-Type': 'text/html'}); res.end(html); } }); port = 3000; host = '127.0.0.1'; server.listen(port, host); console.log('Listening at http://' + host + ':' + port);

Se você usar algo como o Express.js , ele pode ser simplificado para algo assim, já que o Express cuida muito do encanamento HTTP para você:

 var express = require('express'); var fs = require('fs'); var app = express(); app.use(express.bodyParser()); app.get('/', function(req, res){ console.log('GET /') //var html = '
Name:
'; var html = fs.readFileSync('index.html'); res.writeHead(200, {'Content-Type': 'text/html'}); res.end(html); }); app.post('/', function(req, res){ console.log('POST /'); console.dir(req.body); res.writeHead(200, {'Content-Type': 'text/html'}); res.end('thanks'); }); port = 3000; app.listen(port); console.log('Listening at http://localhost:' + port)

Em ambos os casos eu estou lendo “index.html”, que é um arquivo HTML muito básico com o JavaScript que você está usando:

   
Name:

Receba o pedido POST e GET no nodejs:

1) .Servidor

  var http = require('http'); var server = http.createServer ( function(request,response){ response.writeHead(200,{"Content-Type":"text\plain"}); if(request.method == "GET") { response.end("received GET request.") } else if(request.method == "POST") { response.end("received POST request."); } else { response.end("Undefined request ."); } }); server.listen(8000); console.log("Server running on port 8000"); 

2). Cliente :

 var http = require('http'); var option = { hostname : "localhost" , port : 8000 , method : "POST", path : "/" } var request = http.request(option , function(resp){ resp.on("data",function(chunck){ console.log(chunck.toString()); }) }) request.end();