[英]Node.js export variable
我正在编写一个 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, { ... });
用:
module.exports = {
region: my_region,
api_key: my_api_key,
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);
});
}
}
在您的情况下,“module.exports”正在覆盖之前导出的变量。 这就是您对这些未定义的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.