接受POST请求的Node.js服务器

我试图让JavaScript与Node.js服务器通信。

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); 

现在Node.js服务器代码看起来像这样。 在用于GET请求之前。 我不知道如何使它与POST请求工作。

服务器(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); 

在此先感谢您的帮助。

以下代码显示如何从HTML表单读取值。 由于@ pimvdb说你需要使用request.on('data'…)来捕获正文的内容。

 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 = '<html><body><form method="post" action="http://localhost:3000">Name: <input type="text" name="name" /><input type="submit" value="Submit" /></form></body>'; 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); 

如果你使用类似Express.js的东西,那么它可以被简化成类似这样的东西,因为Express会为你处理大量的HTTPpipe道:

 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 = '<html><body><form method="post" action="http://localhost:3000">Name: <input type="text" name="name" /><input type="submit" value="Submit" /></form></body>'; 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) 

在这两种情况下,我正在阅读“index.html”这是一个非常基本的HTML文件,您正在使用的JavaScript:

 <html> <body> <form method="post" action="http://localhost:3000"> Name: <input type="text" name="name" /> <input type="submit" value="Submit" /> </form> <script type="text/JavaScript"> console.log('begin'); var http = new XMLHttpRequest(); var params = "text=stuff"; http.open("POST", "http://localhost:3000", true); http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); //http.setRequestHeader("Content-length", params.length); //http.setRequestHeader("Connection", "close"); http.onreadystatechange = function() { console.log('onreadystatechange'); if (http.readyState == 4 && http.status == 200) { alert(http.responseText); } else { console.log('readyState=' + http.readyState + ', status: ' + http.status); } } console.log('sending...') http.send(params); console.log('end'); </script> </body> </html> 

在nodejs中接收POST和GET请求:

1).Server

  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)。 客户:

 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();