-
命令行窗口
常用的指令:
dir:列出当前目录下的所有文件 cd :目录名 进入到指定的目录 md:目录名 创建一个文件夹 rd:目录名 删除一个文件夹 - 目录 . 表示当前目录 ..表示上一级目录 - 环境变量 path
- 当在命令行窗口打开一个文件,或调用一个程序时,系统会首先在当前目录下寻找文件程序,如果找到了则直接打开,如果没有找到则会依次到环境变量path的路径中寻找,直到找到为止。如果没找到则报错。
- 进程
- 进程负责为程序的运行提供必备的环境
- 线程
-
线程是计算机中最小的计算单位,线程负责执行进程中的程序。
-
js是单线程
-
Node.js是一个能够在服务器端运行js的开放源代码,跨平台js运行环境。-
Node采用Google开发的v8引擎运行js代码,使用事件驱动,非阻塞和异步I/O等技术来提高性能,可优化应用程序的传输量和规模。 -
传统的服务器都是多线程的
-
每进来一个请求,就创建一个线程去处理请求
-
Node的服务器单线程的 -
node处理请求时是单线程,但是在后台拥有一个I/O线程池 -
用
node执行js文件 -
cmd中输入js文件路径,然后
node xxx.js即可运行
-
-
模块化
-
在
Node中,一个js文件就是一个模块 -
在
Node中,每一个js文件中的js代码都是独立运行在一个函数中。 -
而不是全局作用域,所以一个模块的中的变量和函数在其他模块中无法访问。
-
在
node中,通过require()函数引入外部的模块-
require()可以传递一个文件的路径作为参数,node将会自动根据该路径来引入外部模块 -
这里的路径,如果使用相对路径,必须以.或..开头
-
使用
require()引入模块以后,该函数会返回一个对象,这个对象代表的是引入的模块。
-
-
向外部暴露属性或方法
-
可以通过
exports来向外部暴露变量和方法 -
只需要将需要暴露给外部的变量或方法设置为
exports的属性即可。
-
-
使用
require()引入外部模块时,使用的是模块标识,可以通过模块标识来找到指定的模块 -
模块分成两大类
核心模块
-
由
node引擎提供的模块 -
核心模块的标识就是模块的名字
文件模块
-
由用户自己创建的模块
-
文件模块的标识就是文件的路径(绝对路径,相对路径)
相对路径使用.或..开头
-
-
在
node中有一个全局对象global,它的作用和网页中window类似,-
在全局中创建的变量都会作为
global的属性保存 -
在全局中创建的函数都会作为
global的方法保存 -
当
node在执行模块中的代码时,它会首先在代码的最顶部,添加如下代码
-
function(exports,require,module,__filename,__dirname){
}
-
实际上模块中的代码都是包装在一个函数中执行的,并且在函数执行时,同时传递了5个实参。
-
exports,该对象用来将变量或函数暴露到外部 -
require,函数,用来引入外部的模块 -
module,代表的是当前模块本身 -
exports就是module的属性 -
既可以使用
exports导出,也可以使用module.exports导出 -
__filename,当前模块的完整路径 -
__dirname当前模块所在文件夹的完整路径 -
arguments.callee保存的是当前执行的函数对象
-
-
exports和module.exports-
通过
exports只能使用.的方式来向外暴露内部变量exports.xxx=xxx -
而
module.exports既可以通过.的形式,也可以直接赋值
-
module.exports.xxx=xxx
module.exports={
}
包
-
CommonJS的包规范允许我们将一组相关的模块组合到一起,形成一组完整的工具。 -
CommonJS的包规范由包结构和包描述文件两部分组成。 -
包结构
- 用于组织包中的各种文件
-
包描述文件
- 描述包的相关信息,以供外部读取分析。它是一个JSON格式的文件-
package.json位于包的根目录下,是包的重要组成部分。
- 描述包的相关信息,以供外部读取分析。它是一个JSON格式的文件-
-
json文件中不能写注释
-
npm帮助其完成了第三方模块的发布,安装和依赖等,借助npm,node与第三方模块之间形成了很好的一个生态系统。 -
npm命令-
npm -v查看版本 -
npm帮助说明 -
npm search包名
-
-
搜索模块包
npm install /i包名
-
在当前目录安装包
npm install 包名 -g
-
全局模式安装包(全局安装的包一般都是一些工具)
-
npm install 包名 --save安装包并添加到依赖中 -
npm install下载当前项目所依赖的包
-
-
npm init- 初始化
-
npm remove 包名- 删除一个模块
-
npm install 文件路径- 从本地安装
-
npm install 包名 -registry=地址- 从镜像源安装
-
npm config set registry 地址- 设置镜像源
-
通过
npm下载的包都放到node_modules文件夹中,我们通过npm下载的包直接通过包名引入即可 -
node在使用模块名字来引入模块时,它会首先在当前目录的node_modules中寻找是否含有该模块,如果有则直接使用,如果没有则去上一级目录的node_modules中寻找。直到找到磁盘根目录,如果还没有,则报错。 -
Buffer(缓冲区)-
Buffer的结构和数组很像,操作的方法也和数组类似。 -
数组中不能存储二进制的文件,而
buffer就是专门来存储二进制数据。 -
使用
buffer不需要引入模块,直接使用即可。 -
在
buffer中存储的都是二进制数据,但是在显示时都是以16进制的形式显示的。 -
buffer中每一个元素的范围是从00-ff 0-255 0000000-11111111 -
计算机中一个0或一个1 称为1位(bit)
-
8bit = 1 byte(字节)
-
buffer中的一个元素,占用内存中的一个字节 -
buffer.length表示占用内存的大小 -
buffer构造函数都是不推荐使用的 -
buffer的大小一旦确定, -
创建一个10个字节的
buffervar buf = Buffer.alloc(10) -
通过索引,来操作buf中的元素
-
只要数字在控制台或页面中输出一定是10进制
-
Buffer.from(str)将一个字符串转换为buffer -
buf.toString()将缓冲区中的数据转换为字符串 -
Buffer.allocUnsafe(size)创建一个指定大小的buffer,但是buffer中可能含有敏感数据
-
文件系统
-
文件系统简单来说就是通过Node来操作系统中的文件
-
使用文件系统,需要先引入fs模块,fs是核心模块,直接引入不需要下载
-
同步和异步调用
-
fs模块中所有的操作都有两种形式可供选择同步和异步。
-
同步文件系统会阻塞程序的执行,也就是除非操作完毕,否则不会向下执行代码。
-
异步文件系统不会阻塞程序的执行,而是在操作完成时,通过回调函数将结果返回。
-
-
同步文件的写入
-
手动操作的步骤:
- 打开文件
fs.openSync(path,flags [, mode])-
path要打开文件的路径 -
flags打开文件要做的操作的类型 -
r只读的 -
w可写的 -
mode设置文件操作的权限,一般不传返回值:
-
该方法会返回一个文件的描述符作为结果,我们可以通过该描述符来对文件进行各种操作。
-
- 向文件中写入内容
fs.writeSync(fd,string [ , position [, encoding]])- 保存并关闭文件
fs.closeSync(fd)- fd 要关闭的文件的描述符
-
-
异步文件的写入
-
引入
fs模块 -
打开文件
fs.open(path,flags[, mode],callback)-
异步调用的方法,结果都是通过回调函数的参数返回的。
-
回调函数有两个参数:
err:错误对象,如果没有错误则为nullfd:文件的描述符fs.write(fd,string[ ,positon[ , encoding] ],callback) -
用来异步写入一个文件
fs.close(fd,callback) -
用来关闭一个文件
-
-
简单文件写入
fs.writeFile(file,data[,options],callback)fs.writeFileSync(file,data[, options])-
file要操作的文件的路径 -
data要写入的数据 -
options选项,可以对写入进行一些设置 -
callback当写入完成以后执行的函数
-