## 什么是 node
- 第一个就要说什么是 `node.js`
1. `node.js` 是一个基于 `Chrome V8` 的运行时环境
> 再浏览器里面,之所以能运行 js 代码,是因为浏览器都有一个 “引擎”,专门来解析 js 代码
>
> 而 node.js 就是把这个引擎单独拿出来了,当作一个 “软件” 给安装到我们的电脑里面
>
> 那么我们就不需要借助浏览器,就可以用我们的电脑来运行 js 代码
>
> Chrome V8 是目前比较先进的解析引擎,也是 谷歌浏览器 使用的解析引擎
2. 使用 `JavaScript` 语言来进行后台开发
> node.js 就是使用 JavaScript 这个语言来进行后端开发
>
> 换句话说,也就是使用 js 来书写服务端代码
3. `node.js` 是依靠事件驱动的
> 因为 js 是事件驱动语言,node.js 又是使用的 js 语言,所以 node.js 也是事件驱动的
>
> 我们的 js 有一个叫做 EventLoop(事件轮询)的机制,利用这个东西,可以高效而简介的进行开发
>
> 最简单的说 => 其实也就是我们的异步执行代码的机制
4. 非阻塞 I/O
> I: input 表示输入流
>
> O: output 表示输出流
>
> 非阻塞 I/O 也叫做 异步 I/O
>
> 就是利用了 js 的异步执行机制
>
> 把输入和输出变成一个异步行为,那么对于高并发的时候,是很好的一个处理方法
## 为什么要学习 node
- 接下来我们就来说一说为什么要学习 `node.js`
1. 了解后端开发的工作过程
> 学习完 node.js 以后,我们就能了解到前后台交互的整个过程
>
> 能理解在一个项目里面,前端都做了什么,后端都做了什么
>
> 在出现一些错误的时候,可以通过一些错误信息快速捕获到错误出现在哪里
>
> 我们自己的错误我们改,后端的错误,我们和后端交流让他们改
>
> 避免因为不了解错误出现在哪里,而耽误开发进度
2. 书写 `api` 接口
> 我们可以在自己写一些项目的时候,没有后端人员的情况下
>
> 自己书写后代代码
3. 全栈
> 我们想要进步成为一个 全栈工程师,那么必须要经历的一步就是后端的学习
>
> 之所以学习 node.js,就是因为他还是使用 js 语言
>
> 对于我们来说,相对学习成本就要低一些,不需要语法上的切换
## 在哪学习 node
- [node.js官网](https://nodejs.org)
- [node中文网](http://nodejs.cn/)
## 环境配置
- 学习 `node.js` 我们先要会进行环境的配置
- 我们要知道怎么在自己的电脑里面让 `node` 可以运行起来
### node 安装
- 去官网直接进行下载
- 下载好以后直接双击安装,一直 `next` 就可以了
- 安装完毕以后,我们打开命令行(终端)
- `$ node --version`
- 能出现版本号表示安装成功
#### node 相关版本介绍
- `node.js` 到目前为止一经有很多的版本了
- 偶数的版本,比如: `x.6.x` / `x.8.x` / `x.4.x` 表示稳定版本
- 奇数的版本,比如: `x.3.x` / `x.11.x` / `x.9.x` 表示非稳定版本
- `LTS(Long Term Support)`: 表示长期支持的版
- [LTS和Current的区别](https://blog.csdn.net/u012532033/article/details/73332099)
#### node 更新版本
- 如果你的 `node` 版本是比较以前的,或者以后你想更行一下你 `node` 的版本
- 直接去官网下载一个新的 `node` 安装包
- 直接覆盖安装就可以
- **我们覆盖安装的时候,只能用新版本替换旧版本,不能用旧版本替换新版本**
#### node 更新版本注意
- 你更新版本以后,有一些你在之前版本下安装的全局包需要重新安装
- 不能向之前的版本回滚
- 不能再多个版本之间切换(`node` 只能安装一个版本再电脑上)
### npm 安装
- `npm` 不需要我们单独安装,会在安装 `node` 的时候自动帮我们安装
- `npm` 是 `node.js` 的包管理工具,是全球最大的开源库生态系统
- 也就是帮我们下载第三方依赖使用的一个工具
- 打开命令行(终端)输入指令
- `$ npm --version`
- 出现版本号,表示 `npm` 安装成功,可以正常使用
#### npm 版本更新
- 安装 `node` 的时候,会默认安装 `npm` 的最新稳定版本
- 如果你以后想单独更新 `npm` 的时候,不需要从新安装 `node`
- 我们直接使用 `npm` 就可以把 `npm` 更新了
- 使用指令
```shell
# windows 操作系统
$ npm install --global npm
# OS 操作系统
$ sudo npm install --global npm
```
#### npm 插件官网
- `npm` 上有很多的插件
- 我们需要的时候可以直接下载就可以
- [npm插件官网](https://www.npmjs.com/)
- 对于某一个插件,你不是很了解他的用法,也可以直接去 `npm` 官网搜索
- 会有对应的说明文档
### nvm 安装
- 因为我们的 `node` 再一个电脑上只能安装一个版本
- 但是我们再开发过程中,有的时候需要再多个版本下进行测试
- 这个时候我们就需要用到一个工具
- `nvm(node version manager)`: `node` 版本管理工具
- 可以再一个电脑上安装多个版本的 `node`
- 我们使用指令进行 `node` 版本的切换
- 如果你想安装 `nvm` 这个工具
- <span style="color: red; font-size: 30px;">**把你已经安装好的 `node` 先卸载,再进行 `nvm` 的安装**</span>
#### windows 下的安装
- 下载 `nvm`
- [nvm下载地址windows](https://github.com/coreybutler/nvm-windows/releases)
![](./assets/nvminstallforwindows.png)
- 双击安装包进行安装,安装的时候会自动写入环境变量
- 我们打开命令行(终端)
- `$ nvm version`
- 检测出现版本号就表示安装成功了
- [nvm安装相关文章](https://www.cnblogs.com/hamsterPP/p/8076131.html)
#### mac 下的安装
- `mac` 下不需要安装包,而是直接再终端使用指令进行安装
- 先去到 [nvm的github地址](https://github.com/nvm-sh/nvm)
- 向下滑动,找到下图位置
![](./assets/nvminstallformac.png)
- 两个红框的指令执行一个就行,建议使用上面那个
- 直接打开终端执行就可以了
```shell
# 下面两个指令执行一个就行,建议使用第一个
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.0/install.sh | bash
$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.0/install.sh | bash
```
- 你输入完指令直接按回车,会自动进行下载安装,但是此时还使用不了
- 需要手动配置环境变量
#### nvm 的简单使用
- 安装完毕以后,我们就来说一下 `nvm` 怎么使用
- 因为安装之前,我们已经把 `node` 卸载了,所以现在我们的电脑上没有 `node` 环境
- 需要使用 `nvm` 进行下载
- `nvm` 的使用全部都是再命令行(终端)中完成
- 查看你电脑上的存在的 node 版本
- `$ nvm list`
- 会显示你现在电脑上拥有的 `node` 的版本
- 前面有 `*` 的,表示你现在正在使用的版本
- 查看可安装的 `node` 版本
- `$ nvm list available`
- 会显示出可以安装的 `node` 版本
- 使用 `nvm` 安装 `node`
- `$ nvm install 版本号`
- 会自动帮我们下载安装
- 安装的时候,会附带安装好 `npm`
- 使用 `nvm` 卸载 `node`
- `$ nvm uninstall 版本号`
- 会自动进行卸载
- 切换 `node` 版本
- `$ nvm use 版本号`
- 就会切换到对应版本的 `node`
- 注意: **使用 `nvm` 第一次安装完毕 `node` 以后是默认不直接使用的,要先切换一次再使用**
- [nvm使用相关文章](https://www.cnblogs.com/zzd0916/p/11024154.html)
### nrm 安装
- 我们再使用 `npm` 进行下载依赖的时候
- `npm` 默认的下载地址是在国外
- 那么我们下载的时候因为网络原因就会造成下载失败,或者下载太慢
- `nrm` 是一个专门管理 `npm` 下载地址的工具
- 我们再安装的时候直接使用 `npm` 进行安装就行
- 打开命令行(终端)
```shell
# windows 安装 nrm 的指令
$ npm install --global nrm
# OS 安装 nrm 的指令
$ sudo nrm install --global nrm
```
- 就会自动安装完毕
- 安装完毕我们就可以使用了
- 安装完成以后,直接再命令行(终端)
- `$ nrm --version`
- 出现版本号就表示安装成功了,就可以进行使用了
#### nrm 的简单使用
- 我们使用 `nrm` 就是为了切换 `npm` 的下载地址
- 直接再命令行(终端)使用指令就行
- 测试可用下载地址的延迟信息
- `$ nrm test`
- 等到一段时间,会把所有可用地址和网络延迟显示出来
![](./assets/nrm.png)
- 前面就是可以使用的下载地址名称,后面就是网络延迟
- 前面有 `*` 的表示你当前使用的下载地址
- 切换下载地址
- `$ nrm use 地址名称`
- 就会自动进行切换了
- 你再次下载的时候就是使用切换后的地址进行下载了
### mongoDB 安装
- `mongodb` 是一个数据库,和我们之前学的 `mysql` 一样,都是存储数据使用的
- 只不过 `mongodb` 和 `mysql` 存储数据的方式不一样的,使用上不一样
- 我们三阶段所有的数据都是使用 `mongodb` 数据库进行存储的
- [mongodb官方文档](https://www.mongodb.com)
- 参考文章:
- <span style="font-size: 30px;">[MAC安装mongodb数据库](https://www.jianshu.com/p/92b1175e18aa)</span>
- <span style="font-size: 30px;">[windows安装mongodb数据库](https://www.jianshu.com/p/ef18f018111d)</span>
#### 下载 mongodb 数据库
- 来到官网,点击这个 `try free`
![](./assets/mongodb官网.png)
- 下面选项卡切换到 `server`
![](./assets/mongodb下载.jpg)
![](./assets/mongodb下载2.jpg)
- 根据我们自己的电脑进行选择
![](./assets/mongodb选择版本.jpg)
- 选择好以后点击 `download` 就可以进行下载了
- **目前的 `mongodb` 数据库已经不在支持 32位的 windows 操作系统了**
- **我们在选择 `package` 的时候,选择 `MSI`,不要选择 `ZIP`**
- <span style="color: red; font-size: 30px;">**尽量选择 4.0.x 版本 不要选择 4.2.x 以上的版本**</span>
#### 安装 mongodb 数据库
- 下载完毕以后,我们就可以进行安装了
- 下载完毕之后,我们直接双击安装就可以
- 双击进入安装,直接点击 `next` 进入下一步
![](./assets/mongo安装01.png)
- 把 `I accept` 的对勾勾选上,在进行下一步
![](./assets/mongo安装02.png)
- 选择 `Complete`
![](./assets/mongo安装03.png)
- 把 `Install MongoD as a Service` 前面的对勾取消,在点击下一步
![](./assets/mongo安装04.png)
- 把 `Install MongoDB Compass` 前面的对勾也同样取消了,在进行下一步
![](./assets/mongo安装05.png)
- 直接点击 `Install` 进行安装就好了
![](./assets/mongo安装06.png)
- 等他自动安装就好了,安装完毕我们就有了 `mongod` 的运行环境
- 注意:
- <span style="color: red; font-size: 30px;">**把 mongodb 注册为服务的对勾一定要取消**</span>
- <span style="color: red; font-size: 30px;">**安装 mongodb compass 的对勾一定要取消**</span>
- 安装好以后,我们的电脑就有了 `mongodb` 的环境
- 但是此时,还不能使用
- 因为 `mongodb` 不像 `mysql` 会自动找个地方存储我们的数据
- 我们需要自己配置一个位置来作为数据库的存储文件夹
#### 配置 mongodb 数据库
- 接下来我们要进行一下安装后的配置,配置好以后才可以正常使用 `mongoDB` 数据库
- 首先,找一个我们喜欢的地方,建立一个文件夹,作为我们 `mongoDB` 数据库存放数据的文件夹
- 我这里就在 `D` 盘下建立一个叫做 `data` 的文件夹
- 然后,因管理员的形式打开命令行窗口
- 切换到你安装 `mongoDB` 的位置
- 打开命令行
```shell
# 输入指令,关联一下刚才我们创建的那个文件夹
$ mongod --dbpath D:data
```
- 这样就可以了,我们的 `mongoDB` 就可以使用了
- 注意: **这个窗口不能关闭,关闭以后就表示 mongoDB 数据库停止运行**
- 以后每次使用的时候都要找到安装位置,然后启动一下
- 才可以正常使用
### Robo 3T 安装
- `Robo 3T` 是一个友好的 `mongodb` 数据库的可视化工具
- 安装以后我们可以简单快捷的操作 `mongodb` 数据库
#### Robo 3T 下载
- 直接去到 [Robo官网](https://robomongo.org/)
- 点击页面上的下载
![](./assets/Robo官网.jpg)
- 到下载下面选择你要下载的版本就好了
- `Download Your Double Pack` 是两个软件一起下载
- `Download Studio 3T` 功能强大一些的可视化工具(需要付费使用)
- `Download Robo 3T` 普通功能的可视化工具
![](./assets/Robo下载页面.jpg)
- 然后选择你要下载的版本就好了
![](./assets/Robo下载.jpg)
#### Robo 3T 安装
- 下载好以后, 直接双击安装包进行安装就好
- 首先会打开下面安装界面, 点击下一步
![](./assets/001.jpg)
- 然后点击我接受
![](./assets/002.jpg)
- 选择一个你喜欢的位置安装就好, 继续点击下一步
![](./assets/003.jpg)
- 点击安装按钮, 等待安装完毕就好了
![](./assets/004.jpg)
### postman 安装
- 接下来我们安装一个 `postman`
- 是一个接口测试工具
- 也就是当我们写完接口以后,如果直接就使用,我们不能保证接口是否可以正常使用
- 如果不能正常使用,那么我们写了好多代码了,都没有发现,就比较浪费事件
- 在一个就是,将来工作中后端给我们的接口也不一定百分之百没有问题
- 所以我们先要使用个工具测试一下,接口确实没有问题,那么我们在进行开发
- 不能使用 `npm` 进行下载安装了
- 我们要自己下载进行安装
#### postman 下载
- 直接去到 [postman官网](https://www.getpostman.com/)
- <span style="color: red; font-size: 30px;">**向下翻到网页的最底部**</span>
- 点击 `download APP` 来到下载页面
![](./assets/postman官网.jpg)
- 然后按照我们自己的电脑进行选择就好了
![](./assets/postman下载.jpg)
- 选择好以后会自动进行下载的
#### postman 安装
- 下载好以后,我们直接双击运行安装包就可以进行安装了
- 他会自动安装在你的电脑里面, 并且配置好一切
- 并且在桌面上给你生成一个图标
- 我们就可以使用了
### nodemon 安装
- 下面,我们在安装一个 `nodemon` 工具
- 是来帮助我们在 `node` 环境下运行 `js` 文件的
- 因为我们以前使用 `node` 这个指令启动的 `js` 文件
- 只要文件内容发生改变,我们需要手动重启
- 需要重新运行一下文件,才能把我们修改过的内容生效
- `nodemon` 是对我们启动的文件进行监控,只要发生改变,会自动重启的
- 就不需要我们每次改变完毕以后都去重启一下了
- `nodemon` 这个工具,我们直接使用 `npm` 安装就可以了
- 安装一个 `nodemon` 全局包就好了
```shell
# windows 下进行安装
$ npm install --global nodemon
# mac 下进行安装
$ sudo npm install --global nodemon
```
- 安装完毕以后,直接就可以使用
- 和使用 `node` 的指令是一样的
- 找到我们要启动的文件
```shell
# 使用 nodemon 来运行这个 js 文件
$ nodemon index.js
```