从HTML表单发送数据到Node.js服务器

我正在学习Node.js.

我有这个在我的服务器:

var http = require("http"); var url = require("url"); http.createServer(function(request, response){ response.writeHead(200, {"Content-Type":"text/plain"}); var params = url.parse(request.url,true).query; console.log(params); var a = params.number1; var b = params.number2; var numA = new Number(a); var numB = new Number(b); var numOutput = new Number(numA + numB).toFixed(0); response.write(numOutput); response.end(); }).listen(10000); 

像这样的URL: localhost:10000/?number1=50000&number2=1在我的浏览器上回显50001,所以它的工作原理。

如果不使用Express,我需要通过使用HTML的表单发送这两个参数。

这怎么能实现?

简单的答案是<form method="get"> 。 浏览器将把表单数据转换成你已经处理的查询string参数。

如果您需要POST ,HTML表单将作为请求实体主体发布。 在节点中, ClientRequest (在你的例子中是requestvariables)每当身体的一部分到达服务器时发出一个data事件。 你不会一次收到整个身体。 你必须缓冲,直到你收到整个身体,然后parsing数据。

这是很难得到正确的,因为像分块与正常的Transfer-Encoding和浏览器可以提交表单数据的不同方式。 我只是使用强大的 (这是快递使用幕后的东西),或者至less研究如何处理表格post,如果你绝对必须实现自己的。 (实际上,这只是为了教育的目的 – 我不能强调,你应该使用强大的东西,可能会在生产结束。)

我这样解决了我的问题:

sum.js:

 var http = require("http"); var url = require("url"); http.createServer(function(request, response){ response.writeHead(200, {"Content-Type":"text/plain"}); var params = url.parse(request.url,true).query; console.log(params); var a = params.number1; var b = params.number2; var numA = new Number(a); var numB = new Number(b); var sum = new Number(numA + numB).toFixed(0); response.write(sum); response.end(); }).listen(10001); 

index.html的:

 <html> <head> <title> Pedir random </title> <script type="text/javascript"> function operacion(){ var n1 = document.getElementById("num1").value; var n2 = document.getElementById("num2").value; location.href = "http://localhost:10001" + "?number1=" + n1 + "&number2=" + n2; } </script> </head> <body> <h1>Inserte dos números </h1> <form id="forma1"> <input type="text" id="num1"></input> <input type="text" id="num2"></imput> <input type="button" onClick="operacion()" id="enviar" value="enviar"></input> </form> </body> <html> 

不知道这是否是正确的做法,但它解决了我的需求。

你的玉形(假设你使用快递)应该是这样的:

 form(action="/" method="post") input( name="whateverSearch" placeholder="search" autofocus) 

然后传递新提交的数据点whateverSearch您使用req.bodyfind它(见下文)。 在这里,我已经获取了数据点并将其logging到控制台,然后将其提交给DOM以及页面的标题。

 router.post('/', function(req, res) { whateverSearch = req.body.whateverSearch; console.log(whateverSearch); res.render('index', { title: 'MyApp', inputData: whateverSearch}); });