二.理解NodeJs中的模块

NodeJs是什么?

根据官方的回答,得知NodeJs是一个javascript的运行环境。简单来讲,就是可以编译javascript,类似于浏览器编译javascript一样。只不过NodeJs在浏览器编译javascript的功能上,对JavaScript进行了扩展和增强,增加文件处理,操作系统API,非阻塞性I/O操作,数据库访问等等一些功能,把JavaScript从一个前端的编程语言,变成了一个后端的服务器语言。

NodeJs中的模块是什么?

首先理解模块,NodeJs中,我们把一个具有特定功能的Js文件称之为模块,类似于C#,Java语言中 的类。
一个模块通常包含一些特定的功能,用于完成某个操作。如果这个操作需要在很多地方用到,那么模块的优点就显现出来了。我们只需要编写一次,然后在需要用到该模块的地方去调用即可。这个概念,与C#,Java语言中的封装,有异曲同工之妙,你只需要知道调用该模块可以做什么事情,完全不用去管这个模块内部是怎么实现的。

模块的构成

NodeJs中,一个javascript文件就是一个模块。
我们编写一个hello.js文件,输出它里面的属性及对象。

console.log(arguments);

然后使用DOS工具运行该文件。
运行方法:DOS切换到该文件目录下,node hello
在这里插入图片描述
可以看到输出了很多东西,
我们使用 console.log(arguments.callee.toString());来输出看看。

在这里插入图片描述
可以看到,输出了一个function,这个function有5个参数,分别是exports,require,module,__filename,__dirname.
也就是说,当你新建一个js文件,即便是一个空文件,这个js文件也包含一个内置的函数,所以说,一个js文件就是一个模块。
而我们经常用到的require,exports,module三个关键字,并不是凭空冒出来的,而是NodeJs中的模块自带的函数。
以上三个关键字下面会一一讲解,而__filename,__dirname.这个两个参数,一个表示当前js文件的完整路径,另外一个表示当前js文件所在的文件目录,直接使用以下代码输出即可。
cosole.log(__filename);
cosole.log(__dirname);

require

require参数,根据我们 console.log(arguments);输出的内容,可以知道require是一个function,
require的作用就是将你需要的模块引入到你当前的模块中,让两者之间建立依赖关系。
假设我们的nodefiles文件目录下有一个sayHello.js文件。
则可以通过以下代码去调用。

var sayHello=require(’…/nodefiles/sayHello’);

拿到require返回的对象sayHello之后,我们就可以直接使用sayHello中对外公开的函数和属性了。
假设sayHello.js中包含一个对外公开的sayName函数,则使用方法如下:

sayHello.sayName();

需要注意的是,只能够使用返回对象中对外公开的函数和方法,类似于C#,Java语言中类里面的公开方法(public)。

exports

exports参数,根据我们 console.log(arguments);输出的内容,可以知道exports是一个对象。
exports的作用就是将当前模块中的属性或函数对外公开,以供其他模块使用。

//对外公开的属性
exports.name=“Hi,NodeJs”;

//对外公开的无参数的函数
exports.sayHello=function(){
console.log(‘Hello,初识你很高兴。’);
}

//对外公开的带参数的函数
exports.sayName=function(name){
console.log(‘你好,’+name);
}

用法简单,在函数或者属性的前面增加一个exports关键字,那么该对象就可以被其他模块调用了。

module

module参数,根据我们 console.log(arguments);输出的内容,可以知道module是一个对象,既然是对象,那么自然包含自己的属性了。
我们使用console.log(module)输出,可以看到以下内容:
在这里插入图片描述
该对象的其他属性我们先不去理会,后面有机会我们再讲,现在先来看module中的exports属性,可以看到,module中的这个属性也是一个对象,和我们前面所说的exports类似,只不过用法上稍有差别。

我们在实际开发中会遇到一些比较复杂的逻辑,这种逻辑往往需要一个复杂的对象去处理,这个时候,我们如果使用exports参数去处理,就会比较麻烦,不过好在NodeJs为我们提供了一个允许将多个函数及属性放在一块的处理方式,就是module,module是真正意义上的模块,我们修改sayHello.js中的代码如下:
sayHellp=function(){
this.name=";
this.sayHello=function(){
console.log(‘Hello,’+this.name);
}
}
module.exports=sayHello;

那么我们使用require引入这个模块后就不能直接去使用里面的函数及属性了,
具体使用代码如下:

var sayHello=require(’…/node/sayHello’);

var obj=new sayHello();
obj.name=‘NodeJs’;
obj.sayHello();

我们看到,使用module.exports之后引入的模块,是作为一个对象来处理的,这样的话,如果我们需要处理比较复杂的逻辑时,可以采用这种办法,以上例子只是作为参考,希望大家可以活学活用。

NodeJs中的模块类别

本来模块类别打算放在前面去讲,后来想想还是放在后面比较好。

NodeJs重的模块可以分为三类:
1.系统模块
系统模块就是指NodeJs官方为我们提供的一些模块,类似于前面提到的文件模块(fs),网络模块(http),URL模块(url)等等。
系统模块可以直接引入:

    var fs=require('fs');
    var fs=require('http');
  注意系统模块的引入,require的引入路径不再是文件夹路径了,而是直接是一个模块名称,为什么会这样呢?
  因为NodeJs中的模块默认存放在当前文件夹目录下的node_modules文件夹中,并不是当前目录,所以我们引入自己编写的模块时需要重新定位模块的路径,而引入系统模块则不需要,可以直接使用模块名去引用。

2.自定义模块
所谓自定义模块,其实就是我们自己开发的模块,以方便我们自己的使用。这里只是明确一下概念,不再赘述。
3.第三方模块
第三方模块即使国内外的程序员大牛们在NodeJs原有的基础上进行扩展的模块,需要我们使用NPM包管理工具去下载,
可以访问 http://www.npmjs.com 官方网站去搜索,下载你需要的模块,例如我们需要访问mysql数据库,那么我们就去这个网站搜索。
在这里插入图片描述
搜索到了之后我们打开这个模块,可以看到里面有详细的使用方法及安装说明,大家按照上面的说明进行安装,使用即可。
在这里插入图片描述

结语

关于NodeJs中模块的概念及使用,到这里就结束了,后面如果有需要补充的内容,我会进行修改。2019.08.13

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值