7

我正在学习 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 的表单发送这两个参数。

如何做到这一点?

4

3 回答 3

5

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

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

Transfer-Encoding由于诸如分块与正常以及浏览器可以提交表单数据的不同方式之类的事情,这很难做到正确。我只会使用强大的(这是 Express 在幕后使用的),或者如果您绝对必须实现自己的,至少研究它如何处理表单帖子。(真的,这样做只是为了教育目的——我不能强调你应该将强大的用于任何可能最终投入生产的东西。)

于 2013-10-09T21:23:02.390 回答
3

您的玉器形式(假设您使用的是 express)应该如下所示:

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

然后传递whateverSearchreq.body用来查找它的新提交的数据点(见下文)。在这里,我获取了数据点并将其记录到控制台,然后将其提交到 DOM,以及页面的标题。

router.post('/', function(req, res) {
    whateverSearch = req.body.whateverSearch;
    console.log(whateverSearch);
    res.render('index', { title: 'MyApp', inputData: whateverSearch});
});
于 2014-10-27T21:02:42.103 回答
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);

索引.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>

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

于 2013-10-10T01:30:13.167 回答