从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
(在你的例子中是request
variables)每当身体的一部分到达服务器时发出一个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.body
find它(见下文)。 在这里,我已经获取了数据点并将其logging到控制台,然后将其提交给DOM以及页面的标题。
router.post('/', function(req, res) { whateverSearch = req.body.whateverSearch; console.log(whateverSearch); res.render('index', { title: 'MyApp', inputData: whateverSearch}); });