最近在学习NodeJs,基础知识看了看,然后就跑去看Express了,但是真正动手写代码的时候下手还是不够稳准狠。这说明基础知识是不行嘀,所以再返回来重新学习。
NodeJs的项目中,最常使用的就是模块,模块的声明、模块的调用。但是模块到底是个啥?声明都有哪些方式,调用都有哪些方式呢?直入正题,且看下文
先来个最简单的:
//main.js
//main.js var example = require('./example'); example.show();
//example.js
//example.js function show(){ console.log("Hi,I'm example"); } exports.show = show;
ok,很简单吧,运行:node main.js
结果显示调用输出了example.js中的show()方法。
仔细看代码,你会发现,main.js中首先引入了example.js这个模块,然后赋值给example这个变量,调用的时候是example.show(),也就是说example的属性中有show()这个方法。事实上是这样吗,我们测试一下,改写代码
main.js
//main.js var example = require('./example'); example.show(); console.log(example); //增加一行输出
结果:
看最后一行,输出的变量example是个{key:value }这样子的家伙,这是什么?是个Object呗!
整理一下
声明:exports 栗子:exports.xxx = yyy;
调用:require 栗子:var xxx = require('yyy'); //获得的是一个{....}这样子的Object
ok,大家看完上面应该会基本的使用方法了。
那我们在example.js中可以再写几个function,然后exports.xxx = 那个function,main.js中调用。虽然这么写没什么问题,但是这里还是建议一个js文件只做一个模块使用,清晰明了一看项目结构就知道功能,这样不是更好么。
继续,现在换一种写法
//example.js
//example.js module.exports = function(){ console.log("Hi,I'm example"); }
//main.js
//main.js var example = require('./example'); example.show();
直接运行看结果:
报错了吧!show()是个undefined,说明咱们调用的example模块没有show()这个属性。
输出看看example变量是个啥东东
main.js中增加入直接输出example的代码:
console.log(example);
结果:
example变成了Function对象,通过typeof也可以看到是个function
这说明,我们通过module.exports = function(){...} 是直接把一个对象封装成了模块,那么通过require获取这个模块的时候也是直接得到一个对象。
那么,怎么用这个模块呢?看代码:
//main.js var example = require('./example'); var _example = new example();
结果:
Bingo!
总结一下:
方式1 : 创建--- exports.xxx = function(){......}
使用--- var xxx = require('yyy');
xxx.zzz();
方式2:创建 --- module.exports = function(){......}
使用 --- var xxx = require('路径');
var yyy = new xxx();
目前能想到的就这么多,主要的点是:一个是定义在exports对象上的方法,另一个是接口对象就是要输出的对象本身。
后续的内容慢慢添加吧,先记录下来,方便以后复习。