在node module.exports中的object方法中使用'this'

时间:2014-02-25 14:23:28

标签: javascript node.js oop express

这是我的模块:

module.exports = {

    name: '',
    email: '',
    id: '',
    provider: '',
    logged_in: false,

    isLoggedIn: function(req, res, next){
        console.log(this);

    }   
};

我这样导入它:

var user = require('user');

当我使用isLoggedIn函数作为Express的中间时,控制台会记录全局Node对象。如何让它记录函数所在的对象?

修改

所以我有我上面定义的用户对象。根据各种因素,该对象将填充在程序的其他位置。我用来创建一个中间件函数,用于快速测试用户登录。显然放置此函数的位置似乎在用户对象中,但我需要访问logged_in属性来正确评估它。因此使用this.logged_in。

2 个答案:

答案 0 :(得分:2)

你应该把它放在IIFE上:

module.exports = (function() {
    return {
      name: '',
      email: '',
      id: '',
      provider: '',
      logged_in: false,

      isLoggedIn: function(req, res, next){
        console.log(this);
      }   
   }
})();

你可以在这里阅读: http://designpepper.com/blog/drips/an-introduction-to-iifes-immediately-invoked-function-expressions

答案 1 :(得分:2)

当你把它作为中间函数传递时,我相信你正在做类似的事情

func(.., user.isLoggedIn, ..)

当您这样做时,实际上是从isLoggedIn对象中分离user。因此,默认情况下,如果不是严格模式,this将引用全局对象。要解决这个问题,你应该bind这个函数,就像这个

func(.., user.isLoggedIn.bind(user), ..)