NodeJS导出变量

时间:2014-12-23 04:18:37

标签: javascript node.js

我正在编写 nodejs模块,我需要将主文件中的变量数据传递给函数,我这样做:

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 那两个变量值总是" 未定义"。

有人能指出我正确的方向吗?

提前致谢。

2 个答案:

答案 0 :(得分:11)

导入其他模块的值为module.exports。因此,您分配给module.exports的内容将被导出。无论之前分配给它的是什么都丢失了。

module.exportsexports之间的关系是它们最初引用同一个对象:

var exports = module.exports = {};

因此,为其中任何一个赋予属性都会改变同一个对象。但是,您要将新对象分配给module.exports,因此现在它们都引用了不同的对象。

一个简单的解决方案是将新对象分配给exports,然后分配其他属性:

exports = module.exports = {...};
exports.region = region;

如果要保持语句的顺序,则必须扩展默认的导出对象,而不是创建新的对象:

Object.assign(exports, { ... });

答案 1 :(得分:1)

为什么不使用:

 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"覆盖以前导出的变量。这就是你未定义的原因。