【问题标题】:scope var and lifetime into sails controller nodejs范围变量和生命周期进入帆控制器nodejs
【发布时间】:2014-01-30 16:05:01
【问题描述】:

我使用sails.js,我想知道声明为sails 控制器的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,但是一旦我访问/member 网页,用户就会被user.connected=true 初始化,当我访问/index 页面时它仍然处于连接状态.所以我将user.connected=false 添加到index 函数中,它可以正常工作。

但我完全不明白。据我所知,userHomeController.js 脚本的局部变量,每次加载文件时都应将其销毁,并在每次调用时重置为{}

其实我在写这个问题的时候,也在想一些事情……

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

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

【问题讨论】:

    标签: javascript node.js controller sails.js


    【解决方案1】:

    我对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 的生命周期和范围,因为它没有按我的预期运行。
    猜你喜欢
    • 2012-06-23
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    相关资源
    最近更新 更多