我正在编写一个 Node.js 模块,我需要将变量数据从主文件传递给函数。我这样做:
var region;
var api_key;
exports.region = region;
exports.api_key = api_key;
module.exports = {
getSummonerId: function(sum, callback) {
var summoners = {};
var summoner = sum.replace(/\s+/g, '');
request("https://na.api.pvp.net/api/lol/" + region + "/v1.4/summoner/by-name/" + summoner + "?api_key=" + api_key, function(error, response, body) {
summoners[summoner] = JSON.parse(body);
callback(summoners[summoner][summoner].id);
});
}
}
在主文件中:
var lol = require('./apiwrapper.js');
lol.api_key = "example";
lol.region = "las";
lol.getChampions(function(data) {
console.log(data);
})
但是从apiwrapper.js文件来看,这两个变量的值总是“undefined”。
我该如何解决这个问题?
最佳答案
导入到其他模块的值是 module.exports
。因此,您分配给 module.exports
的内容将被导出。之前分配给它的任何内容都会丢失。
module.exports
和exports
之间的关系是它们最初指的是同一个对象:
var exports = module.exports = {};
因此,为它们中的任何一个分配一个属性都会改变同一个对象。但是,您正在为 module.exports
分配一个新对象,因此现在它们都引用不同的对象。
一个简单的解决方案是将新对象也分配给 exports
,然后分配其他属性:
exports = module.exports = {...};
exports.region = region;
如果你想保持语句的顺序,那么你必须扩展默认的导出对象,而不是创建一个新的对象:
Object.assign(exports, { ... });
关于javascript - Node.js 导出变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27614020/