最近在学习一门新的语言:NodeJS
我们先来了解一下客户端和服务端
客户端 :又称为用户端,为用户提供本地服务的程序,来接受来自服务端的数据或资源
服务端 : 为客户端提供服务的,例 数据、资源,运行服务端的终端(服务器)
我们都知道JS是脚本语言,脚本语言都需要一个解析器才能运行。对于写在HTML页面里的JS,浏览器充当了解析器的角色。而对于需要独立运行JS,NodeJS就是一个解析器。
每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行各种计算,还允许JS使用运行环境提供的内置对象和方法做一些事情。例如运行在浏览器中的JS的用途是操作DOM,浏览器就提供了document之类的内置对象。而运行在NodeJS中的JS的用途是操作磁盘文件或搭建HTTP服务器,NodeJS就相应提供了fs、http等内置对象。
nodejs是运行在服务端的JavaScript运行环境,没有window(发布于2009年5月)它的实质是对于chrome的V8引擎的封装,js是一门脚本语言,运行需要一个解析器,在客户端,浏览器的js引擎充当了js的解析器,在服务端,nodejs充当了js的解析器,或者说解析器就是一个运行环境,在客户端,解析器提供了操作DOM、BOM的接口,而在nodejs中,解析器提供了操作磁盘、文件中的接口
模块
Node里面的模块系统遵循的是CommonJS规范
CommonJS定义的模块分为:模块标识(module)、模块定义(exports)、模块引用(require)
require函数用于在当前模块中加载和使用别的模块
exports对象是当前模块的导出对象,用于导出模块公有方法和属性
通过module对象可以访问到当前模块的一些相关信息,但最多的用途是替换当前模块的导出对象
在一个node执行一个文件时,会给这个文件内生成一个 exports和module对象 而module又有一个exports属性 exports = module.exports = {};
那我们来看看下面的代码吧。
let a = 100;
console.log(module.exports); //能打印出结果为:{}
console.log(exports); //能打印出结果为:{}
exports.a = 200; //这里辛苦劳作帮 module.exports的内容给改成 {a : 200}
exports = '指向其他内存区'; //这里把exports的指向指走
//test.js
var a = require('/utils');
console.log(a) // 打印为 {a : 200}
其实exports只辅助module.exports操作内存中的数据,辛辛苦苦各种操作数据完,累得要死,结果到最后真正被require出去的内容还是module.exports的