在节点module.exports的对象方法中使用“this”

这是我的模块:

module.exports = { name: '', email: '', id: '', provider: '', logged_in: false, isLoggedIn: function(req, res, next){ console.log(this); } }; 

我像这样导入它:

 var user = require('user'); 

当我使用isLoggedIn函数作为Express的中间时,控制台会logging全局的Node对象。 我如何得到它的function是在内的对象?

编辑

所以我有我的用户对象如上定义。 根据各种因素,这个对象在程序的其他地方被填充。 我用创build一个中间件函数来快速的testing用户是否login。显然把这个函数放在用户对象的地方,但是我需要访问logged_in属性来正确评估它。 因此使用this.logged_in。

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

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

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

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

你应该把这与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