各位大神,晚上好!事情是这个样子的,我今天下载了一本《Node.js实战》的电子书,看到其中有关于处理提交的表单的内容,于是就试着跟着做了起来(没想到刚开始就卡壳了),先把代码放上来:
var http = require("http");
var arr = [];
function show(res){
var html ='<html><head><title>Document</title></head><body>'
+'<h1>Test</h1>'
+arr.map(function(item){
return '<li>'+item+'</li>'
}).join(" ")
+'<form method="post" action="/">'
+'<input type="text" name="name">'
+'<input type="submit" value="submit">'
+'</form> </body></html>';
res.end(html);
}
var server = http.createServer(function(req, res) {
if (req.method == 'POST') {
req.on('data', function(chunk) {
arr.push(chunk.toString());
show(res);
})
} else { show(res); }
}).listen(3000);
其大致过程是这样的:
每次提交到本页面的内容都会累加到一个数组中,然后再把每次提交的内容返回到当前页面中,下面的图演示了大致过程。
我的疑问是:
每次提交后相当于刷新了本页面,那么按道理讲原本存储在数组中的数据应该在每次提交后被清空啊,举个例子,比如第一次填写的是“Jack”,程序将“Jack”放到了数组中,当我第二次填写“lee”并提交的时候,相当于重新载入了页面,之前保存在数组中的“jack”应该不会存在了,但是为什么却依然如上图所示,竟然还保存着呢?
举个类似情况的php的例子(看懂我上面所表达意思的大神可以不看下面的内容)
<?php
$post=[];
if($_POST){
array_push($post,$_POST["name"]);
print_r($post);
}
echo <<<EOT
<html lang="en">
<head>
<title>Document</title>
</head>
<body>
<form action="/" method="post">
<input type="text" name="name">
<input type="submit" value="submit">
</form>
</body>
</html>
EOT;
?>
php的过程也是将post过来的数据存入数组,但是在每次提交后,php并没有保存上一次的数据,嗯,PHP是“正常”的,<( ̄︶ ̄)>
你的arr是全局的,就是说你的arr是和你的Node服务共存亡的,只要你的Node服务没有挂掉,arr从服务启动之初就会一直存在。换句话说,只要另一个人访问你的页面,并且提交数据,你这边刷新也是能够看见的。