前几节,我们讲了通过nodejs来模拟接口,前台请求数据。本节我们开始讲解node的模块化。
1.自定义模块
前面,我们讲解了http、fs模块,这些模块都是node自己本身的模块,那么我们自己怎么自定义模块呢。
我们这里假设b.js是我们需要引入的模块。代码如下:
var a=1;
var b=2;
我们在a.js中使用b;
var mod=require('b.js');
console.log(mod);
运行代码我们会发现报错了
Error: Cannot find module 'b.js'
奇怪,我们明明已经引入了。现在,我们把代码修改下:
var mod=require('./b.js');
console.log(mod) //{}
结果为空对象,但是没有报错,说明模块已经引入。对比之前的代码,发现我们在引入模块只多添加了./
。原因是
1.node.js中引入模块,如果不加./
这类路径,它默认识别为自己的系统模块(实际也可以不加,后面我们会讲到)
但是为空对象。这又是为什么?因为我们没有在模块b中没有导出。我们修改b模块为:
exports.a=1;
exports.b=2;
在a模块中输出mod,结果为
console.log(mod) //{a:1,b:2}
所以
2.node.js中,如果需要使用其他模块,需要使用exports
导出所需要的内容。
上面我们只定义了a,b两个变量,使用了两次exports,但是加入有很多需要多出的变量呢,当然又更简单的办法。我们修改b.js的代码如下
module.exports={
a:1,
b:2
}
结果同样可以在a.js中获得导出的a,b两个变量。
所以
3.node.js中,可以使用module.exports
导出多个模块。
4.由于node.js中处理的就是js文件,所以我们在引入模块时候可以省略.js后缀。
即上面的代码可以改成
var mod=require('./b');