node.js学习(7)——node.js的模块化输入输出

上一节-node.js学习(6)—ajax提交数据练习

前几节,我们讲了通过nodejs来模拟接口,前台请求数据。本节我们开始讲解node的模块化。

1.自定义模块

前面,我们讲解了http、fs模块,这些模块都是node自己本身的模块,那么我们自己怎么自定义模块呢。


node.js学习(7)——node.js的模块化输入输出_第1张图片
1.jpg

我们这里假设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');

下一节-node.js学习(8)—npm介绍以及自定义模块的发布

你可能感兴趣的:(node.js学习(7)——node.js的模块化输入输出)