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

时间:2013-10-09 21:09:21

标签: javascript html node.js post

我正在学习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);

这样的网址:localhost:10000/?number1=50000&number2=1在我的浏览器上回显50001,所以它有效。

不使用Express,我需要使用HTML将这两个参数传递给表单。

如何实现这一目标?

3 个答案:

答案 0 :(得分:5)

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

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

由于chunked vs normal Transfer-Encoding以及浏览器提交表单数据的方式不同,很难做到这一点。我只是使用formidable(这是Express在幕后使用的),或者至少研究它如何处理表单帖子,如果你绝对必须实现自己的。 (而且,真的,这只是为了教育目的 - 我不能强调你应该使用强大的东西来处理可能最终生产的东西。)

答案 1 :(得分: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>

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

答案 2 :(得分: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});
});