nodeJS学习笔记

来源:互联网 发布:联想手机数据恢复 编辑:程序博客网 时间:2024/06/06 01:43

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的测试

+ <b>如何进入REPL:</b>通过终端输入`node`敲回车就可以进入

直接在cmd窗口书写代码

    + <b>如何退出REPL:</b>两次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参数替代