如何在Nodejs中保留特定于每个连接客户端的变量值

时间:2015-10-28 10:11:43

标签: javascript node.js express

我是Nodejs的新手,并使用Visual Studio 2015和Basic Nodejs Express 4应用程序模板。

通过来自客户端的帖子请求设置一些值。然后我打开另一个标签并发送另一个帖子请求。我在先前请求中设置的值仍然存在。我想为每个连接的客户端设置变量。

Nodejs代码

var someValue = 0;
app.post('/set-values', function (req, res, next) {
    var reqBody = req.body;
    someValue += parseInt(reqBody.someValue);
    res.send(JSON.stringify({ value:someValue }));
});

客户代码

$.post("http://localhost:1337" + "/set-values", { someValue: 5 }, function     (d) {
    var data = JSON.parse(d);
    console.log(data.value);
});

当客户端发出请求时,控制台值为5然后在另一个请求上它是10然后在另一个请求上它是15 ... 我希望所有请求都有5个,并在每个连接启动时保持someValue属性为0但我也需要在post范围之外。每次搜索都会向我发送有关socket.io客户端或用户身份验证的页面

1 个答案:

答案 0 :(得分:0)

您应该为身份请求生成密钥。

如果我们假设您将在客户端执行此操作,则您的代码应如下所示:

if(typeof(Storage) !== "undefined") {
    var val = Math.random().toString(36).substring(7);
    localStorage.setItem("key", val);
} else {
   alert("web storage not supported")
}


$.post("http://localhost:1337" + "/set-values", { someValue: 5, key:localStorage.getItem("key") }, function(d) {
    var data = JSON.parse(d);
    console.log(data.value);
});

你的服务器端:

var dataStore = [];

app.post('/set-values', function (req, res,next) {
   if(dataStore[req.body.key] == undefined) dataStore[req.body.key] = 0;
   dataStore[req.body.key] += parseInt(req.body.someValue);
   res.send(JSON.stringify({ value:dataStore[req.body.key] }));
})

在这种情况下,我们使用HTML5 LocalStorage,您可以尝试使用jQuery Cookie或其他东西。