我有两个模块来表示我的问题/困惑:
f2.js:
var user;
var getName = function(userName) {
user = userName;
return user;
};
module.exports.getName = getName;
module.exports.user = user;
f1.js:
var userName = require('./f2.js');
console.log(userName.getName("myName"));
// I need below to return "myName" too - how?
console.log(userName.user);
当我运行f1.js时,我得到了这些:
myName
undefined
在范围界定或异步编码方面我缺少什么?从逻辑上讲,我知道getName函数总是在前面运行,所以如何阅读' user'使用该预运行功能设置的其他模块中的变量?我最终希望用express扩展它并将其用作站点登录
答案 0 :(得分:0)
试试这个
userName.getName(username){
console.log(username);
});
如果异步问题那么
f2.js
var user;
var getName = function(userName,callback) {
user = userName;
callback(user);
};
module.exports.getName = getName;
module.exports.user = user;
f1.js
var userName = require('./f2.js');
userName.getName(username, function(uname) {
console.log(uname);
});
希望这有帮助。
答案 1 :(得分:0)
这是一种解决方法。它会让你找到你想要的东西,但它并不令人满意。
在f2.js中:
var getName = function(userName, user) {
user = userName;
return user;
};
module.exports.getName = getName;
在f1.js中:
var userName = require('./f2.js');
var user;
console.log(userName.getName("myName", user));
console.log(user);
答案 2 :(得分:0)
您可以将名称附加到用户功能的实例中,如下所示:
function createUser() {
this.name = '';
return {
user : this.user,
getName: function(userName) {
this.user = userName;
return this.user;
},
}
}
var newUser = createUser();
module.exports.getName = newUser.getName;
module.exports.user = newUser.user;

这假设您只有一个User
实例。否则你可能想要导出整个函数并像这样使用它:
// exports createUser function instead
module.exports.createUser = createUser;
// in other files
var createUser = require('../path/createUser.js');
var bobby = createUser();
bobby.getName('bobby'); // will return 'bobby'
console.log(bobby.user); // will also return 'bobby'

答案 3 :(得分:0)
问题是exports.user
和var user
是独立副本。最初,它们保持相同的值,但是改变为一个不会影响另一个,类似于其他变量:
var foo = 'one';
var bar = foo; // copies the value
bar = 'two';
console.log(foo, bar); // "one" "two"
要让exports.user
始终提供var user
的值,一个选项是将前者定义为getter property,然后返回后者:
Object.defineProperty(module.exports, 'user', {
get: function () {
return user;
}
});
或者,直接将其分配给函数,但其他模块需要调用它:
module.exports.user = function () {
return user;
};
var userName = require('./f2.js');
// ...
console.log(userName.user());