1.什么是Node?
1.1Node是一个JS的运行环境
1.2对比浏览器中的JS
1.2.1 浏览器中的JS
web api 提供了操作浏览器窗口和页面的功能。例如:BOM操作,DOM操作,AJAX
这些功能有局限性。例如:跨域问题,文件读写
1.2.2 Node中的JS
nodeAPI几乎提供了所有能做的事情
1.2.3 Node中的JS对比浏览器中的JS
① 浏览器提供了有限的能力,JS只能使用浏览器提供的功能做有限的操作
② Node提供了完整的控制计算机的能力,NodeJS几乎可以通过Node提供的接口,实现对整个操作系统的控制
1.3官方文档
Node官网:https://nodejs.org/en/
Node中文官网(民间网):http://nodejs.cn
2.Node可以做什么?
2.1 开发桌面应用程序
例如QQ,微信... 经常用的VScode就是用node开发的
2.2 开发服务器应用程序
结构1:微型结构
Node服务器要完成请求的处理、响应、和数据库交互、各种业务逻辑
这种结构通常应用在微型的站点上。例如:个人博客、公司官网
结构2:大型结构
这种结构非常常见,应用在各种规模的站点上
Node服务器
不做任何与业务逻辑有关的事情。绝大部分时候,只是简单的转发请求。但可能会有一些额外的功能
1.简单的信息记录:请求日志、用户偏好、广告信息
2.静态资源托管
3.缓存
后端服务器
处理大型的业务逻辑
3.为什么要学习NodeJS?
1. JS开发省时,省力
2. 因为nodeJS是单线程,没有线程切换的损耗,没有线程之间的竞争。
3. IO处理非常快
4. node不适合处理复杂运算,例如java可以开多线程进行并行运算
其他服务端语言(例如java,.net)能做的事情,node全部都能做。语言没有好坏之分,只有场景的适合。
node开发者就是为了寻找快速的IO处理的语言,所以选择了JavaScript
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时。
4.全局对象
global
在nodejs中不存在全局对象window,只有全局对象global
global跟浏览器环境中的this相同,表示顶级对象
在node环境中不存在变量提升至全局对象global
注意:浏览器的全局环境this表示window,node中this不是表示global,而是一个空对象
1.setTimeout,setInterval
用法跟浏览器环境完全相同。
注意:浏览器返回的是ID,node环境中返回的是对象
2.setImmediate
类似于 setTimeout 0
3.console
浏览器在控制台输出
node在命令行输出
4.__dirname*
获取当前模块所在的目录
**注意:并非global属性**
5.__filename*
获取当前模块的文件路径
**注意:并非global属性**.
6.Buffer
类型化数组
继承自 UInt8Array
计算机中存储的基本单位:字节
使用时、输出时可能需要用十六进制表示
7.process
cwd()
返回当前nodejs进程的工作目录,运行的cmd窗口的目录
exit()*
强制退出当前node进程
可传入退出码,0表示成功退出,默认为0,主要是为了输入到日志里面的
argv*
获取命令中的所有参数
platform
获取当前的平台系统
kill(pid)
据进程ID杀死进程
env
获取环境变量对象
5.Node模块化
1.模块的查找
1. 绝对路径
2. 相对路径
2.1 加 ./ 情况
在服务端,一定要加./,表示从当前目录开始
2.2 不加./情况
①检查是否是内置模块,如:fs、path等
②检查当前目录中的node_modules
③检查上级目录中的node_modules
3.后缀名
如果不提供后缀名,自动补全
补全顺序为:js,json,node,mjs
4.文件名
如果仅提供目录,不提供文件名,则自动寻找该目录中的index.js
5.运行node ./
package.json中的main字段,默认值为index.js
2.module对象
记录当前模块的信息
3.require函数
resolve函数 拼接成一个绝对路径
6.基本内置模块
1.os
参考地址:https://nodejs.org/dist/latest-v12.x/docs/api/os.html
1.EOL
操作系统版本
windows的代号为\r\n。但是控制台看不到,被转义了
2.arch()
操作系统CPU体系结构
3.cpus()
CPU内核的信息
4.freemem()
电脑剩余多少内存,返回为字节
5.homedir()
用户目录
6.hostname()
主机名
7.tmpdir()
获取临时文件目录
2. path
参考地址:https://nodejs.org/dist/latest-v12.x/docs/api/path.html
注意:path模块操作全部相当于字符串操作,并不会判断路径是否真实存在
1.basename
获取某段路径的最后一个 / 后面的内容
第二个参数为可选参数,如果匹配,去掉匹配内容
2.sep
操作系统的分隔符
3.delimiter
输出当前操作系统的定界符
4.dirname
获取路径的目录
5.extname
获取路径的后缀名
6.join*
拼接路径,会根据操作系统拼接
7.normalize
根据操作系统规范路径
8.relative
换成相对路径的格式
9.resolve*
转换成绝对路径,根据cmd窗口来拼接
注意:相对于命令行工具,一般使用配合__dirname使用
3.url
参考地址:https://nodejs.org/dist/latest-v12.x/docs/api/url.html
1.parse()*
字符串转换成对象
2.format()
对象转换成字符串
4.util
参考地址:https://nodejs.org/dist/latest-v12.x/docs/api/util.html
1.callbackify
异步函数转换成callback形式
2.promisify
callback形式转换成异步函数
3.isDeepStrictEqual
两个对象深度比较
7.文件I/O
1. I/O:input output
对外部设备(磁盘、网卡、显卡、打印机...)的输入输出
IO的速度往往低于内存和CPU的交互速度
2.fs模块
参考地址:https://nodejs.org/dist/latest-v12.x/docs/api/fs.html
1. fs.readFile
读取一个文件
2. fs.writeFile
向文件写入内容
文件名不存在会新建,目录不存在报错
3.fs.stat
获取文件或目录信息
1.size
占用字节
2.atime
上次访问时间
3.mtime
上次文件内容被修改时间
4.ctime
上次文件状态被修改时间
5.birthtime
文件创建时间
6.isDirectory()
判断是否是目录
7.isFile()
判断是否是文件
4.fs.readdir
获取目录中的文件和子目录
5.fs.mkdir
创建目录
6.fs.exists
判断文件或目录是否存在