nodeJS学习笔记
听说公司里接下来的项目要用nodeJS跟C++做后台,找时间学习一下nodeJS相关知识;
Node 第一天笔记
什么是`Node.js`
> `Node.js` 是一种建立在 `Google Chrome's v8 engine` 上的 `non-blocking` (非阻塞), `event-driven` (基于事件)的 `I/O` 平台,`Node.js` 平台使用的开发语言是 `javascript`, 平台提供了操作系统底层的 `API`,方便做服务器端编程,具体包括文件操作、进程操作、通信操作等系统模块
>
Node.js 可以用来做什么 ?
- 具有复杂逻辑的动态网站
- `websocket` 服务器
- 命令行工具
- 带有图形界面的本地应用程序
+ 基于 `Node.js` 和地单方工具 `electron` 可以开发桌面应用程序
- **Node.js 不适合做 CPU 密集型服务,不适合做大量计算的应用**(高并发)
nodejs --- 后台语言 ---- 里面DOM\BOM ---- ECMAScript
终端的使用
---
---
配置环境变量
打开常用的服务
cmd
#### 001什么是终端
> 终端也叫控制台,有人也叫bash(在Linux中),terminal
终端一般就是可以用来输入一些命令,然后把该命令的执行结果输入到终端中
在计算机中,所有通过可视化界面能做到的操作都可以通过命令来完成
#### 002、如何进入终端
- 按住win+r,打开运行
- 输入cmd敲回车就可以进入到终端环境
- 控制台默认进入当前用户目录
#### 003、命令行打开应用
- notepad 打开记事本
- mspoint 打开画图
- calc 打开计算机
- sysdm.cpl 打开环境变量设置窗口
- write 写字板
#### 004、常用终端命令 (linux)
- d: ----- 切换盘符
- md 文件夹名称 ----- 创建文件夹
- cd ------ 进入目录
- cd.. ------ 回退到上一级
- cd .>b.txt --- echo> 创建文件(例如echo>a.txt) ----- 创建文件
- dir 查看文件目录 或者 - ls(使用window powershell)
- rd 删除目录 或者 - rmdir
- ren 重命名
- type 查看文件内容
- del 删除文件
- cls 清空控制台
- re /s/q 文件夹名称 删除非空文件
- cat (linux 命令)
环境安装配置
---
#### 001、安装方式
- 普通安装方式[官方网站](https://nodejs.org/zh-cn/);
- nvm : node 版本 管理工具
- 多版本安装方式
1. 卸载已有的Node.js
2. 下载[nvm](https://github.com/coreybutler/nvm-windows)
3. 在C盘创建目录dev
4. 在dev目中中创建两个子目录nvm和nodejs
5. 并且把nvm包解压进去nvm目录中
6. 在install.cmd文件上面右键选择【以管理员身份运行】
7. 打开的cmd窗口直接回车会生成一个settings.txt文件,修改文件中配置信息
* 也可能会在c 盘根目录下生成,复制过来就可以
* 没有生成的,直接从别处复制,自己写都可以
8. 配置nvm和Node.js环境变量
* NVM_HOME:C:\dev\nvm
* NVM_SYMLINK:C:\dev\nodejs
9. 把配置好的两个环境变量加到Path中
10. 以上完成nvm的安装
#### 002、nvm常用的命令
- nvm list 查看当前安装的Node.js所有版本
- nvm install 版本号 安装指定版本的Node.js
- nvm uninstall 版本号 卸载指定版本的Node.js
- nvm use 版本号 选择指定版本的Node.js
代码执行方式
- REPL模式
+ REPL(read-eval-print-loop);类似于浏览器中的控制台在命令行窗口中
* 可以使用该REPL做一些代码或者API的测试
+ 如何进入REPL:通过终端输入`node`敲回车就可以进入
直接在cmd窗口书写代码
+ 如何退出REPL:两次ctrl+c 可以退出REPL模式,或者执行.exit命令
+ 基本操作
* 使用下划线“ _ ”,表示上一个命令的返回结果
- 命令行模式
+ 在当前目录下打开控制台
* 在当前文件夹下,空白区域 shift + 鼠标左键,在此处打开命令窗口
* 编辑下 下载插件
* cmd进去到当前目录
* 在执行文件所在的文件夹地址栏中输入cmd,弹出命令窗口
全局成员概述
- `__dirname` --- 文件路径,不包含文件名称
- `__filename` --- 文件路径,包含文件名称
- `process` --- 提供node进程相关信息 npm run dev
初识模块化
nodeJS所有的开发方式都是建立在模块化的上的
- 传统非模块开发的缺点:
+ 命名冲突
+ 文件依赖
- 前端标准的模块化规范:
+ AMD - requirejs
+ CMD - seajs
- 服务器端的模块化规范:
+ CommonJS - Node.js
- 模块化相关规则:
+ 如何定义模块:一个JS文件就是一个模块,模块内部的成员都是相互独立
+ 模块成员的导出和导入
- **模块成员的导出最终以 module.exports 为准**
- 写法建议
+ 如果要导出单个的成员,一般我们使用exports导出;
+ 如果要导出的成员比较多,一般我们使用module.exports的方式
+ **这两种方式不建议同时使用**
- exports与module.exports的关系:
+ module.exports = exports = {};
模块化细节补充
- 模块成员导出 : global
- 模块文件加载优先级
+ 模块文件的后缀3种情况:.js .json .node(c++)
+ 模块的加载优先级(不加文件后缀时的优先级):.js -> .json -> .node
ES6-let与const (var)
- let
+ let声明的变量不存在预解析
+ let声明的变量在块级作用域有效
+ 同一个作用域内,let不可以声明重名的变量
+ 在代码级内部,不可以在声明变量之前使用
- const
+ 声明的变量不可以重新赋值,必须在声明的时候进行初始化,
+ 除了这条规则,别的特性和let一致
- babel
+ 将es6转换成浏览器能识别的es5语法
- 暂时性死区
+ 在代码块内部,不可以在声明变量之前使用
+ 在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”
ES6-变量解构赋值
- 解构赋值
+ 从数组和对象中提取值,对变量进行赋值,这就是解构赋值
字符串相关扩展
- includes() - 判断字符串中是否包含指定的字串(有的话返回true,否则返回false)
+ 参数一 :匹配的字串;
+ 参数二 :从第几个开始匹配
- startsWith() - 判断字符串是否以特定的字串开始
- endsWith() - 判断字符串是否以特定的字串结束
函数的拓展
- 可以传递默认值
- 参数可以进行解构解析
- `...rest` (rest参数,名称可以自定义) --- 把单个数据项解析为数组
- `...` (扩展运算符) --- 把数组解析为单个数据项
- 箭头函数
+ 如果箭头函数不需要参数或者多个参数,就用圆括号代表参数部分
+ 如果箭头函数的代码块多于一条语句的话,使用大括号 ` {} ` 将其包裹起来,并用return 语句返回
- 箭头函数注意事项
+ 1、函数中的this是声明时的对象,不是调用时的对象
+ 2、箭头函数不可以new, 也就是说它不是构造函数
+ 函数内部不可以使用arguments,可以用rest参数替代