为了让nodejs开发过程中,为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统,模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++ 扩展。
在nodejs中,提供了exports和module.exports导出模块, require对象从外部获取一个模块的,即所获取模块的 exports或者module.exports导出的模块。module.exports和exports是属于CommonJS模块规范!根据这个规范,每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。
CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。如果你希望你的模块就想为一个特别的对象类型,请使用module.exports;如果希望模块成为一个传统的模块实例,请使用exports.xx方法;module.exports才是真正的接口,exports只不过是它的一个辅助工具。最终返回给调用的是module.exports而不是exports。
下面来看一下exports和module.exports
let cs = function(){
return {
name:null,
setName:function(){
var self = this;
setTimeout(function(){
if(self.name){
console.log(self.name);
}else{
self.name = "hzhzh"+Math.random();
console.log(self.name);
}
},3000)
}
}
}
exports.cs = cs;
//或者使用module.exports.cs = cs;达到的效果是相同的
按上面的导出方式,调用使用的时候需要按下方的方法调用
var cs = require("./cs.js");
router.get('/testMo',function(req,res){
let csF = new cs.cs();
csF.setName();
res.json({success:true})
})
在上面的导出方式还可以使用module.exports = cs;这种方式,如果采用这种方式导出的话,那么调用需要按下面的方法
var cs = require("./cs.js");
router.get('/testMo',function(req,res){
let csF = new cs();
csF.setName();
res.json({success:true})
})
注意 从上图我们可以看到,我两次访问输出了不同的结果。我为什么要进行两次访问,还有就是上面的示例代码中我做了个延时3秒执行输出的操作。原因在于我导出的如果直接是一个对象的话,那么就会出现一个数据缓存的问题,我们先来看一下修改后的代码
let cs ={
name:null,
setName:function(){
var self = this;
setTimeout(function(){
if(self.name){
console.log(self.name);
}else{
self.name = "hzhzh"+Math.random();
console.log(self.name);
}
},3000)
}
}
module.exports = cs;
调用代码为:
var cs = require("./cs.js");
router.get('/testMo',function(req,res){
cs.setName();
res.json({success:true})
})
我们了看一下代码结果
看到了什么,两次访问的结果相同,也就是说第一次访问以后给name赋值了,然后第二次访问的时候name值是存在的。换句话说module.exports导出模块时相当于创建了一个全局的对象,每次调用访问的都是这一个对象,数据是全局公用的,所以在以后的使用过程中需要注意。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有