NodeJS学习
认识node
node是JS运行在服务器端一种环境,可以让JS实现后端开发
1.node.js和JS对比
js
-
JS客户端技术,运行于浏览器中
-
有多种解释器可以使用,每种浏览器的解释器可能不同
-
存在代码兼容性问题
-
支持ES对象,自定义对象,BOM,DOM对象
-
主要用于网页DOM元素的操作,实现用户的交互效果
node
-
服务器技术,与PHP,JSP等是类似的技术
-
只有一种解释器,只能运行与基于V8引擎改进而来的与运行环境
-
只有一种解释器,不存在兼容性问题
-
支持ES对象,自定义对象,node.js扩展对象
-
主要用于实现服务器端运行逻辑,如文件系统操作,数据库访问等
2.Node安装与基本命令
1. node安装需要去官网下载Node.js (nodejs.org),目前最新版本是18.12.1,版本并不兼容一定看好版本号
2. 安装完可以cmd命令行输入 node -v 如果有版本号,证明安装成功,我的是16.15.1版本的
3. node有两种模式:一种是交互模式,一种是脚本模式
node回车进入交互模式
脚本模式: node 然后拖拽写好的文件,比如下面,然后回车执行写好的js文件
4. 输入两次ctrl + c 或者一次 ctrl + d 退出交互模式
3.宿主环境
宿主环境就是JS运行时的环境,有浏览器,和node,宿主对象在不同环境下提供不同的对象
4.全局对象global和window
1.在任意作用域下都可以访问的对象称为全局对象,node环境下是global对象,浏览器环境下是window对象
2.在全局作用于下直接声明的变量,会自动添加到全局对象里面,称为全局对象的属性
5.console控制台(node环境下也可以使用)
1. console.log(1); // 输出日志
2. console.info(2) // 输出消息
3. console.warn(3) // 输出警告 黄色三角
4. console.error(4) // 输出错误 红色叉
5. console.time()/console.timeEnd() 记录执行时间
6.Buffer 对象
1. 缓冲区,是内存中的一块区域,用于临时存储数据
2. 创建缓冲区 Buffer.alloc(内存大小,存储内容),中文一个占三字节
3. 存储的是十六进制编码,可以通过toString()转换
7.process对象进程
1. 进程: 计算机上启动的每个程序都是一个进程,每个进程都会占用一定的资源
2. process.arch 可以看cpu的架构(我的是x64)
3. process.platfrom 查看当前操作系统
4. process.pid 查看当前Node.js进程的编号
5. process.kill(编号) 杀死进程,会退出交互模式
8.定时器函数
1. 一次性定时器: setTimeout(()=>{},毫秒)
2. 周期性定时器: setInterval(()=>{},毫秒)
3.立即执行定时器: setImmediate(()=>{})
定时器函数都是异步函数,会先把回调函数放入事件队列中,等主函数执行完后再执行
9.模块化开发module
什么是模块?
每个JS文件就是一个模块,一般是按功能划分模块,每个JS文件实现一种功能。
模块化开发的优点?
- 每个模块单独设置,不用考虑其他模块使用了什么命名
- 提高代码的复用性,每个模块都是一个功能,需要使用该功能时只需要引入该功能模块
- 提高代码的可维护性,那个功能出现问题,就修复哪个模块
- 多人协作,互不干扰
- 模块之间的组合分解易于操作
模块分类
- 核心模块:主功能模块,其他功能模块需要被引入到核心模块中使用
- 自定义模块:自己写的功能模块
- 第三方模块:别人写的好用的功能块
模块的引入
- 使用的是CommonJS模块化规范,引入使用require()命令
- 写相对路径加文件名: 直接找到该文件引入
- 写相对路径文件夹名: 去文件夹下查找package.json说明文件,查看该文件中main属性值是哪个文件,如果没有package.json文件则默认是该文件夹下的index.js文件.
- 只写文件夹名: 会在同级中寻找node_modules文件夹,然后在这个文件夹中寻找文件(这一步遵循第二条规则),如果同级没有node_modules文件夹则会返回上一级查找
如果有package.json文件
10.npm命令
- npm: 是用来管理包(第三方功能块)的工具模块, 包的安装卸载升级上传都需要用到
- 常用的命令
- npm install -y 初始化文件夹,在当前文件夹下生成一个package.json文件,记录使用到的所有的包
- npm install 包的名称 : 下载包
- npm install 自动下载package.json文件中所有记录的包
- npm 所有命令可以查看https://www.npmjs.cn/
11.同步异步
- JS是单线程运行
- 同步: 在主程序中执行,会阻止主程序后续代码的执行,通过返回值获取结果
- 异步: 在一个独立的线程执行,不会阻止主程序后续代码执行,通过回调函数获取结果
- node中的回调函数都是异步,回调函数会放进事件队列中,等主程序执行完再执行
- 当执行异步的API时,会开启多线程,回调函数放进事件队列中
未完待续...