Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript sails控制器节点的范围变量和生存期_Javascript_Node.js_Controller_Sails.js - Fatal编程技术网

Javascript sails控制器节点的范围变量和生存期

Javascript sails控制器节点的范围变量和生存期,javascript,node.js,controller,sails.js,Javascript,Node.js,Controller,Sails.js,我使用sails.js,我想知道在sails控件中声明的var的作用域var和生存期 var user = {}; module.exports = { index: function (req, res) { user.connected = false; return res.view({ user: user }); }, member: function (req, res) { user.connected = true;

我使用sails.js,我想知道在sails控件中声明的var的作用域var和生存期

var user = {};

module.exports = {
  index: function (req, res) {
    user.connected = false;

    return res.view({
      user: user
    });
  },

  member: function (req, res) {
    user.connected = true;

    return res.view('home/index', {
      user: user
    });

  }
};
首先,我试图仅在
成员
功能中设置
用户
,但一旦我访问了/member网页,用户就被初始化为
user.connected=true
,当我访问/index页时,它仍然是连接的。因此,我将
user.connected=false
添加到
index
函数中,它的工作方式与预期的一样

但是我一点也不明白。据我所知,
user
HomeController.js
脚本的一个局部变量,每次加载文件时都应该销毁它,并在每次调用时重置为
{}

事实上,当我写问题的时候,我想了一些事情

因为我使用了
模块.exports
,函数索引和成员被加载到内存中,调用不是在
HomeController.js
脚本上完成的,而是在
模块.exports
全局对象上完成的,而且因为
用户
是一个对象,他被“指针”引用它不是一个副本,而是每个函数中的一个引用,所以当我对它进行更改时,它在引用使用的任何地方都会更改。它就像模块中的一个全局对象,很奇怪


我说得对吗?我错过什么了吗?你有更高级的解释吗?谢谢。

我不熟悉sails,但这里的问题是,每个请求都将向该模块变量写入一个用户,在处理并发请求时,您会遇到各种各样的困惑。在请求期间保留变量的标准方法是将其附加到请求对象:

module.exports = {
    index: function (req, res) {
        if (!req.user) {
            // You'll probably have resolved a user and appended it to req in an
            // Earlier middleware.
            req.user = {};
        }

        user.connected = false;

        res.view({ user: req.user });
    },

    member: function (req, res) {
        if (!req.user) {
            req.user = {};
        }

        user.connected = true;

        res.view('home/index', { user: req.user });
    }
};

呵呵,是的,我知道,事实上这段代码是临时的,我写给设计师的是一些变量,而不必关心数据库!创建视图只是伪造的数据,真正的数据会随后出现。只是当我创建假数据时,我想知道用户var的生存期和范围,因为它没有像我预期的那样工作。