Node
模块化管理
node应用程序由模块组成,遵循CommonJS模块规范,使用模块管理的好处是隔离模块得物作用域,避免出现命名冲突
什么是CommonJS:是一套代码的规范,构建一个在浏览器之外的javascript语言的生态系统
CommonJS规范的主要内容:
通过模块的导出:module.exports导出对外的变量或接口
通过require将其他模块导入到当前模块的作用域中。
CommonJS特点:
所有模块都运行在当前模块的作用域中,不会污染全局作用域
模块是同步加载的是根据模块出现的顺序依次加载
模块可以多次加载但只有在第一次加载时运行。其他的加载会放入缓存中,后面使用时直接从缓存中读取
Node的module对象
在node内部定义了一个module构造函数,构造函数的属性有:
id:表示模块的标识符
parent:调用模块的模块
exports:表示要导出的值
paths:表示该模块的查找路径,当前目录的ndoe_moudules -->父目录的Node_modules---> ....-->跟目录下的node_modules
path:当前模块所在的路径
filename:当前模块所在的文件名称
强调:在CommonJS规范中所有与的模块都是Module的实例(对象)
exports变量
该变量指向的module.exports,作用是方便我们用户的操作
module.exports.area=function(r) {
returnMath.PI*r**2
}
不能直接给exports直接复制,这样就切断了exports与module.exports之间的连续
require命令
是node的内置命令主要用于加载模块文件
作用:
导入并运行javaScript文件,他返回的是exports对象
加载规则:
加载文件的默认后缀名是 . j
如果参数字符串以'/'开头,表示加载的文件是位于绝对路径下的文件
如果参数字符以'./'开头,表示加载的文件是位于相对路径下的文件。
如果参数字符串不以'./'或者'/'开头的则表示,加载的是一个默认提供的核心模块(位于Node的系统安装目录中),或者一个位于各级node_modules目录的已安装模块(全局安装或局部安装)
Node里的Buffer对象
作用:
是Node提供的处理二进制数据的对象、是node的内置对象、在使用时不需要安装、可以直接使用,不需要requlre('buffer')
使用的原因:JavaScript处理字符串的功能非常强大,但在二进制数据处理方面能力很弱
因此node就内置了buffer对象专门处理二进制的数据,buffer是构造函数,
可以使用new去创建buffer的对象,浏览器的v8引擎会为Buffer的对象分配内存空间,类似于数组
letbuf=newBuffer(259) //256表示buf有259个单元,类似于数组.下标的范围在0~258之间
console.log(buf)
//强调:buf的每个单元存放的数据必须是0~255之间的整数值。即Buffer的每个单元的就是一个字节
强调:buf的每个单元存放的数据必须是0~255之间的整数值。即Buffer的每个单元的就是一个字节。
Byte:字节
1024Byte ==> 1kB
1024KB==>1MB
1024MB==>1GB
1024GB==>1TB
1024TB ==> 1PB
Buffer对象可以和字符串进行互换
Buffer构造函数
新方法Buffer.alloc(number):创建给定单元个数的缓冲区,返回的是Buffer对象
Buffer.from(string/[],):创建一个缓冲区,缓冲区的数据由参数给定
给构造函数传递整数:表示分配多少个自己的存储空间
letbytes=newBuffer(5) //表示给bytes分配5个字节的存储空间
给构造函数传递数组:数组的成员必须是整数值、
letbytes=newBuffer([0x10,0x48])//将数组传递给Buffer构造函数
构造函数传递字符串:默认的编码格式是utf8
letb1=newBuffer('蜗牛学院','utf8')
console.log(b1.toString())
注意:在JavaScript中一个汉字占3个字节
fs模块中读取文件的函数
readFile(filename,callback):异步的读
readFileSync(filenam,callback)