我正在学习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将这两个参数传递给表单。
如何实现这一目标?
答案 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});
});