关于node.js的一点问题

各位大神,晚上好!事情是这个样子的,我今天下载了一本《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是“正常”的,<( ̄︶ ̄)>
图片描述

阅读 3.2k
3 个回答

你的arr是全局的,就是说你的arr是和你的Node服务共存亡的,只要你的Node服务没有挂掉,arr从服务启动之初就会一直存在。换句话说,只要另一个人访问你的页面,并且提交数据,你这边刷新也是能够看见的。

后台将这些数据作为数组保存了,每次提交数组添加数据,然后读取数组的数据显示。

你的arr声明的是一个全局的变量

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题