NodeJS导出变量

mdv*_*mdv 3 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);
   });
 }
}
Run Code Online (Sandbox Code Playgroud)

并在主文件中:

var lol = require('./apiwrapper.js');

lol.api_key = "example";
lol.region  = "las";


lol.getChampions(function(data) {
   console.log(data);
})
Run Code Online (Sandbox Code Playgroud)

但是从apiwrapper.js那两个变量值总是" 未定义 ".

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

提前致谢.

Fel*_*ing 11

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

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

var exports = module.exports = {};
Run Code Online (Sandbox Code Playgroud)

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

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

exports = module.exports = {...};
exports.region = region;
Run Code Online (Sandbox Code Playgroud)

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

Object.assign(exports, { ... });
Run Code Online (Sandbox Code Playgroud)