1、JavaScript的进化
工具类库 => 组件类库 => 前端框架 => 前端应用
经历了后天进化过程,JavaScript不断被类聚和抽象,以更好的组织业务逻辑。从另一 个角度而言,说明了JavaScript天生就缺乏的一项功能:“模块”。
2、CommonJS规范
JavaScript如果要形成模块化必须要有一个规范制约,因此就有了CommonJS规范
这些规范涵盖了
- 模块
- 二进制
- Buffer
- 字符集编码
- I/O流
- 进程环境
- 文件系统
- 套接字
- 单元测试
- Web服务网关接
- 包管理

4、CommonJS的模块规范
(1)模块引用 var math = require('math'); 在CommonJS规范中,存在require()方法,这个方法接受模块标识,以此引入一个模块的API
到当前上下文中。
(2)模块定义
exports对象用于当前模块的方法或变量,并且它是唯一的导出出口。在模块中,还存在
一个module对象,它代表模块自身,exports是module的属性。
在node中一个文件就是一个模块,将方法挂在export对象上作为属性即可导出此方法。 // math.js
exports.add = function () {
var sum = 0,
i = 0,
args = arguments, l = args.length;
while (i < l) { sum += args[i++]; }
return sum;};
引入模块
在另一个文件中,我们通过require()引入模块后,就能使用定义的属性或方法 // program.js
var math = require('math'); exports.increment = function (val) { return math.add(val, 1);
};
(3)模块标识
模块标识其实就是通过require(“模块”)传递的参数,参数的命名必须符合驼峰命名的字符串,或以./,../;命名的相对路径或绝对路径
模块的定义与引用图解
5、node模块的实现
从图中我们可以发现node的模块化,无非就是通过export 和require()和module,但是实现起来却非常的麻烦。
(1)模块引入需要经历的过程
路径分析 => 文件定位 => 编译执行
关于node在执行(文件模块)路径分析、文件定位和编译过程深度理解需要C/C++语言基础,初学者建议浅出就可以了
(2)模块的分类
①核心模块:node提供的模块
在node服务启动过程中会被优先加载进入内存,省略路径分析和文件的定位过程,加载速度是最快的!
②文件模块:用户编写的模块
文件模块是动态加载,需要完整的 路径分析、文件定位和编译执行,相对核心模块执行速度较慢!
(3)缓存优先
node会对引入的模块(核心+文件)都会进行缓存,无论是加载核心模块还是文件模块都会以缓存优先加载。
(4)核心模块有哪些
HTTP 模块 、URL 模块、Fs 模块都是 nodejs 内置的核心模块,可以直接引入使用。
基本使用
1,使用http模块的时候,首先需要引入该模块
2,然后使用createServer创建一个服务器,
3,并且监听端口
最后运行程序:打开终端,切换到文件的根目录,执行命令node 文件名再回车就可以了。
程序启动后,在浏览器中打开http://localhost:8888/,就会在终端中看到相关的打印
此时,我们会发现浏览器的地址栏出一直处于加载状态,因此需要在服务器的回调函数中执行end方法来是web服务器停止处理脚本并返回当前结果。
另外,在上面,我们使用的是默认的localhost,但是有的时候,localhost是被占用了,需要使用其他的IP来运行,只需要在监听端口处添加IP作为第二个参数就可以了。
这里默认会有两个请求,第二个是地址栏图标的请求。
添加响应
在上面的回调函数中使用到了两个参数:req表示请求,res表示响应,如果要给请求添加响应,首先需要设置一个响应头,在这个响应头中指定http状态码,文件类型和字符集
然后使用write添加响应内容
完整代码如下
既然req是表示请求,里面最重要的就是req.url了,通过req.url拿到了用户的请求地址后,如何解析出我们想要的数据,就需要用到URL模块了。
具体使用参考:www.cnblogs.com/yuyujuan/p/…