2013-10-09 67 views
6

我正在学习Node.js。从HTML表格发送数据到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的表单发送这2个参数。

这是如何实现的?

+1

http://stackoverflow.com/questions/15568851/how-i-can-send-data-from-html-form-to-node-js-function – Andy897

+0

@ Andy897 - 已经看了看说。但是,我的老师不希望我使用Express。 –

+0

http://stackoverflow.com/questions/8811213/how-to-post-a-form-from-html-into-node-js-file – Andy897

回答

5

简单的答案是<form method="get">。浏览器会将表单数据转换为您已经处理的查询字符串参数。

如果您需要POST,HTML表单将作为请求实体主体发布。在节点中,ClientRequest(您的示例中的request变量)在每次大块身体到达服务器时发出一个data事件。 你不会一次收到整个身体。您必须进行缓冲,直到收到全身,然后解析数据。

由于像分块与正常Transfer-Encoding和浏览器可以提交表单数据的不同方式,这很难得到正确的结果。我只是使用formidable(这是Express在后台使用的内容),或者至少研究如何处理表单帖子,如果你绝对必须实现自己的。 (真的,只为教育目的–为此,我不能强调不够,你应该对任何可能在生产最终使用强大的。)

2

我解决我的问题是这样的:

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> 

不知道,如果它是这样做的正确的方式,但它解决了我的需求。

+4

没有理由在浏览器中使用JavaScript。将它改为'

'和''你就完成了。 – josh3736

2

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

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

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

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