Javascript sails控制器节点的范围变量和生存期
我使用sails.js,我想知道在sails控件中声明的var的作用域var和生存期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;
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的生存期和范围,因为它没有像我预期的那样工作。