与 PHP 等脚本语言不同。NodeJS 是一个长期运行的进程,应该与 Java 或 .NET 进行比较。该模块,因此您的文件可以通过 公开内容module
,是一个单例。因此,counter
变量的范围是该特定模块的节点进程中的一个字段。如果您有多个节点进程运行同一个模块,则counter
变量是不同的(例如,在分叉进程时)。这同样适用于不同模块中的变量,从术语上讲,它是一个完全不同的内存地址,因此与普通浏览器环境不同,它不可能出现名称冲突。
要回答有关跟踪访问次数的问题,您必须建立连接客户端的识别模式。HTTP 是无状态的,因此 HTTP 连接没有现有状态,但是可以使用会话/cookies 来实现。此外,如果您打算基于非 cookie 驱动的技术进行跟踪,您可以使用浏览器指纹或仅使用 IP 地址。将其存储在进程范围变量中是一个坏主意,因为一旦进程重新启动,您就会丢失这些信息。因此,您当然应该使用数据库,前提是您希望这些信息能够长期存在。
这是一个使用进程范围存储的非常幼稚的实现,并且可能会爆炸内存......
var express = require('express');
var app = express();
var counters = {};
app.get('/', function (req, res) {
if (typeof counters[req.ip] !== 'undefined') {
counters[req.ip]++;
} else {
counters[req.ip] = 1;
}
res.send('You visited #' + counters[req.ip] + ' times!');
});
app.listen(80);