这是我的模块:
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。
答案 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), ..)