基于路径变量的节点中的动态全局变量

时间:2017-03-17 08:15:40

标签: javascript node.js

我想做以下事情:

            var globVar={}
            globVar[usr]=["Values"];

            function1(usr){
               //calculations with globVar[usr]
            }

            function2(usr){
               //calculations with globVar[usr]
            }

            app.post('/', function(req, res) {
                var formString = req.body.filter1;
                usr= req.connection.user;
                globVar[usr].push(formString);

                function1(usr);
                function2(usr);
                res.redirect('/');
            });

usr = req.connection.user来自nodeSSPI模块。我需要根据usr制作这个globVar,以便当用户同时运行此应用程序时,globalVar不会混淆。现在它运行良好但仅适用于单个用户:)

现在,当我启动app时,usr未定义。任何想法如何从应用程序初始化的路线获取它的价值?

感谢您对此事的考虑。

1 个答案:

答案 0 :(得分:0)

在应用初始化时,您不知道哪些用户会使用它。

相反,不要做

globalVar[usr] = ["Values"];

在应用程序初始化;改为使用延迟初始化:

app.post('/', function(req, res) {
    var formString = req.body.filter1;
    usr = req.connection.user;
    if (!globVar[usr]) {              // This is
        globVar[usr] = ["Values"];    // the lazy
    }                                 // initialization
    globVar[usr].push(formString);

    function1(usr);
    function2(usr);
    res.redirect('/');
});

但请注意,这意味着您的应用会慢慢增加其内存消耗,因为它为用户分配内存,然后如果该用户消失则永远不会回收它。在某个地方,某个时候,您将要删除用户的值:

delete globVar[usr];