模块.在nodejs中导出- fn vs object
module.exports in nodejs - fn vs object
我试图理解以下两种我认为是相同功能的替代表示之间的区别。
apiRegistry1.js
module.exports = function () {
var apiRegistry = {};
var files = fs.readdirSync('./apis');
for (var index in files) {
var fileName = files[index];
var module = fileName.split('.')[0];
apiRegistry[module] = require('../apis/' + module);
}
// console.log(apiRegistry) --> Prints {key: moduledef ..}
return apiRegistry;
};
和
apiregistry2.js
var apiRegistry = {};
var files = fs.readdirSync('./apis');
for (var index in files) {
var fileName = files[index];
var module = fileName.split('.')[0];
apiRegistry[module] = require('../apis/' + module);
}
// console.log(apiRegistry) --> Prints {key: moduledef ..}
module.exports = apiRegistry;
server.js
var apiRegistry1 = require('./includes/apiregistry1')(); // returns {key: moduledef ..}
var apiRegistry2 = require('./includes/apiregistry2'); //returns {}
apiRegistry1的行为如我所期望的,但2没有。在某种程度上,它是有意义的,1是一个函数,并在调用时进行评估,这就是为什么它工作,但我不明白为什么在模块内打印值总是工作,但在它之外引用却没有。我是否遗漏了一些关于如何要求工作的基本内容?
var module = fileName.split('.')[0];
是罪魁祸首。
因为作用域在JavaScript中是如何工作的,module
变量不是局部的for
循环,而是整个文件。因此,当您在末尾使用它时:
module.exports = apiRegistry;
您在自己的module
变量上设置了exports
属性,而不是期望您使用的一个节点。更改为使用另一个变量名可以解决您的问题:
var apiRegistry = {};
var files = fs.readdirSync('./apis');
for (var index in files) {
var fileName = files[index];
var myModule = fileName.split('.')[0];
apiRegistry[myModule] = require('../apis/' + myModule);
}
// console.log(apiRegistry) --> Prints {key: moduledef ..}
module.exports = apiRegistry;
相关文章:
- setInteval vs setTimeout
- $(this).prop('property') vs. this.property
- Js.erb VS按钮标记-不'不起作用.为什么?
- reactjs this.refs vs document.getElementById
- angular.js:13424错误:[ng:areq]参数'fn'不是函数,getObject
- Performance: NaCl vs Emscripten
- 文本表示法VS.构造函数,用于在JavaScript中创建对象
- Advantages to DOMParser vs template & innerHTML
- JavaScript-===vs===运算符性能
- Babel编译错误:找不到模块核心js/library/fn/get迭代器
- 开发第三方小部件-Angular vs jQuery vs普通的旧JS
- PhantomJS(vs nightwatch.js)设置cookie错误
- JS-fn()中返回后方括号的含义{return{}[]}
- Javascript events: window.event vs argument reference (funct
- 需要确认我对Servlet vs RESTful网页的理解's的差异
- "#"keyCode=222 vs 51(Chrome与Android版Chrome)-为什么有区别
- .notion vs.[]notation |插入到文本对象中
- Javascript-使用“”将toDateStringMonth从文本字符串解析为数字字符串;如果“;vs“;开关”;
- Javascript: obj.fn() vs x=obj.fn;x()
- 模块.在nodejs中导出- fn vs object