【发布时间】:2016-06-27 18:58:56
【问题描述】:
我已经能够在 node.js 和 php 中编写应用程序有一段时间了,但是我才真正发现了一个奇怪的区别,我觉得我还没有完全理解。
我想我注意到的不同之处在于,假设我们必须让客户访问由 php 运行的 Web 应用程序,他们将在后端拥有两个完全不同的所有数据实例(变量数组等)。在 node.js 中,它们并不完全。
这是我做的一个测试,试图避免一些混乱:
PHP 测试
前端js
$.post("/ajax.php", {test:"test"}, function(result){
console.log(result);
});
ajax.php
$testarr = array();
if(isset($_POST['test'])){
$testarr[] = $_POST['test'];
print_r($testarr);
}
...在这个例子中,如果我在两个不同的浏览器中访问应用程序,甚至在同一个客户端中,前端控制台将始终输出一个包含单个元素的数组。所以数组本质上会在刷新/新请求时重置。
Node.js 测试
前端js
$.post("/test", {test:"test"}, function(result){
console.log(result);
});
app.js
var testarr = [];
app.post("/test", function(req, res){
testarr.push(req.body.test);
console.log(testarr);
});
然而,当我从不同的浏览器刷新页面时,数组不会重置,并且每个请求都会得到 ["test", "test", "test", etc]。来自两个不同浏览器的两个不同客户端如何访问同一个数组?通常数据必须通过数据库、特殊请求等共享,对吧?
我显然误解了 node.js 的一些重要理念,如果有人能提供很好的解释,我将不胜感激。
【问题讨论】:
-
在节点 JS 中,你“继续运行”。变量只是一个变量,就像在页面上一样,它一直存在,直到您重新加载。这就是为什么 node 在很多任务上都比 php 好得多的原因:它几乎不需要 apache+php 的每个连接开销。这也是为什么您需要小心传递私人数据的原因。
标签: javascript php jquery node.js server