关于Node.js

一 Node.js介绍

Node.js是一个基于Chrome V8引擎的ECMAScript运行环境,其使用了一个事件驱动、非阻塞式I/O的模型,使其轻量又高效。

1.1 宿主环境

以网景的Netscape Navigator内置的JavaScript 1.1为蓝本,由ECMA-262定义的 ECMAScript 是一种脚本语言标准,它对该脚本语言的语法、类型、语句、操作符等做出明确规定。


关于Node.js_第1张图片
图片1.png



Javascript是由ECMAScript、DOM、BOM三部分组成,浏览器实现了ECMAScript标准,使其能够运行于浏览器,我们称浏览器为ECMAScript的宿主环境。


除了可以运行于浏览器环境外,ECMAScript还可以运行于Adobe Flash环境中(称为Action Script),这时Adobe Flash也是ECMAScript的宿主环境。
Nodejs是另一种可以运行ECMAScript的宿主环境。

1.2 运行Node.js

宿主环境不同,依据ECMAScript标准实现的脚本的执行方式也不同,例如Javascript必须通过script标签引入,在浏览器环境下才能被执行,Nodejs则需要通过命令终端以命令的形式执行。
图片:

2.1 基础语法

Nodejs是ECMAScript的宿主环境,与浏览器中的Javascript类似,所以其基础语法是一致的,都遵循ECMAScript 的标准语法规范。
实践中不同的宿主环境又会在ECMAScript的基础上进行扩展,例如浏览器的Javascript就扩展了window、location、navigator等对象,在Nodejs中则扩展了一些其他的对象。


Nodejs的扩展,如下:
1、require 用来加载并执行其它脚本文件
2、module用来导出脚本文件的属性或方法
3、exports 用来导出脚本文件的属性或方法
4、__dirname 用来获取当前文件目录
5、__filename 用来获取当前文件的绝对路径
6、global 全局对象,类似于浏览器中的window。

2.2 ES6

Javascript在设计之初只是用来做简单的数据较验,后来发展到可以做一些网页的动态效果用来增强用户体验,再后来ECMA组织负责组织制订Javascript规范的制订,将其称为ECMAScript,伴随着互联网的迅速发展,对ECMAScript提出了更高的要求,为了适应开发的需要,ECMA组织也在不断的修改完善ECMAScript的标准(如ECMAScript6简称ES6)。
然而新的标准所定义的规范在浏览器中的Javascript中并不能得到很好的应用,原因在于浏览器种类较多,开发者并不能约束用户必须使用何种浏览器,导致浏览器高低版本共存是常态,为了考虑兼容,开发者不得不放弃使用一些高级特性。
Nodejs则不会出现上述情况,Nodejs由统一的团队组织维护,通过版本升级方式可以及时跟进ECMAScript的标准,而且多数情况Nodejs是运行于服务端的,开发者可以决定使用Nodejs的版本,很多高级特性可以在Nodejs中得到很好的运用。

2.2.1 块级作用域

任何一对花括号({})中的语句集都属于一个块,在块中声明的变量在代码块外都是不可访问的,称之为块级作用域,ES5以前没有块级作用域.

2.2.2 let关键字

let用于声明变量(类似于var),其声明的变量只在当前代码块内有效,实际上是创建了块级作用域.

2.2.3 const关键字

const 用于声明常量,常量与变量不同,变量声明后其值可以任意更改,而常量一旦赋值就不允许被更改.

2.2.4 变量解构赋值

按照某种模式,从数组和对象中提取值,对变量进行赋值这被称为解构。
(a) 数组解构赋值
(b) 对象解构赋值

2.2.5 字符串扩展

关于Node.js_第2张图片
2.png

2.2.6 数组扩展

关于Node.js_第3张图片
3.png

2.2.7 函数扩展

(a) 默认参数,允许为函数指定默认参数
(b) reset参数,用于获取多余的参数,将多余的参数装到一个数组中
(c) 扩展运算符,它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列
(d) 箭头函数,使用“箭头”(=>) 定义函数

3.1 模块介绍

Nodejs在ECMAScript的基础上扩展并封装了许多高级特性,如文件访问、网络访问等,使得Nodejs成为一个很好的Web开发平台。
基于Nodejs这个平台将Web开发常用的一些功能进行封装,称为模块。

3.2 系统模块

在安装Nodejs时一些模块自动被安装,这些模块大多由Nodejs官方维护,称这类模块为系统(核心)模块,如fs、path、os、http等。
模块被加载后才能使用,Nodejs提供了全局的函数require加载模块。
1、os模块 获取当前操作系统信息
2、fs模块 文件读写操作
3、path模块 路径处理

3.3 文件模块

除了系统模块外,还有以文件形式存在的模块,这些模块由一些组织或个人根据不同的业务需求开发。
注:模块也被称为包。

3.4 用户模块

1、Nodejs中文件模块分两种,一种是.js结尾,一种是以.json结尾
2、require加载模块路径
相对路径,如 ./ 或 ../
绝对路径,如 E:\nodejs\02day\4-code\23cart 或 / (类unix系统)
直接写模块名会被当成系统模块或加载node_modules目录的模块
3、exports和module.exports暴露模块接口
4、多文件模块(也叫包)指某一个功能模块的集合,通常由多个文件构成,统一到某一目录集中管理,并且使用package.json记录包的相关信息,例如模块名称、版本号、作者等,可使用npm init根据提示创建

3.5 第三方模块

到目前为止,第三方模块数量已经相当庞大,为了能够更好的管理这些模块,Nodejs官方提供了一个工具(npm)专门用于管理这些第三方模块
npm (Node Package Manager) 这个工具随Nodejs一起被安装,可以使用 npm -v 检测是否安装

4.1 http服务模块

使用Nodejs系统模块http可以创建并启动http服务器。

4.2 搭建服务器

1、引入http模块

屏幕快照 2018-02-02 下午3.27.03.png

2、创建http服务
屏幕快照 2018-02-02 下午3.28.43.png

3、监听端口
屏幕快照 2018-02-02 下午3.29.38.png

4、监听http请求
屏幕快照 2018-02-02 下午3.30.37.png

5、浏览器访问 http://localhost:3000
关于Node.js_第4张图片
屏幕快照 2018-02-02 下午3.33.59.png

4.3 处理响应

通过res对象处理响应,如状态码,响应头,响应主体等


关于Node.js_第5张图片
屏幕快照 2018-02-02 下午3.43.38.png

4.4 处理请求

使用req对象处理请求,如请求方式、请求头、请求参数、请求主体等

关于Node.js_第6张图片
屏幕快照 2018-02-02 下午3.49.28.png

get 查询参数,查询字符串做为地址的一部分,需要使用url模块进行解析才可以得到

关于Node.js_第7张图片
屏幕快照 2018-02-02 下午3.55.56.png

post参数做为请求主体传递
关于Node.js_第8张图片
屏幕快照 2018-02-02 下午3.59.25.png

4.5 静态网站

我们通过浏览器所能看到的网页内容实质上是服务器返回的html字符串,浏览器进行渲染输出


关于Node.js_第9张图片
屏幕快照 2018-02-02 下午4.03.24.png

浏览器解析html标签过程中,遇到img、script、link、iframe等标答时会再次向服务器发起请求,服务器也需要做出响应


关于Node.js_第10张图片
屏幕快照 2018-02-02 下午4.07.44.png

4.5.1 路径

路径是描述位置的一种方式,遵循一定规则,即路径都有一个起点称之为“根”,以“/”或“\”做为分隔符,使用“.”和“..”分别表示当前级和上一级。路径分为绝对路径和相对路径。
将以“根”开始,使用“/”或“\”分隔的路径称为绝对路径。
将以“.”或“..”开始,使用“/”或“\” 分隔的路径称为相对路径。
1、文件系统路径
操作系统上的文件都是存储在磁盘中的,使用路径可以准确确定到某个文件的位置。
文件系统中盘符(windows)或“/”(类unix)为路径的“根”,使用分隔符“/”或“\”分隔的是真实存在的目录名称和文件名。
2、网络路径
网络路径即url,用来标识互联网资源位置的一种方式,通常由协议、服务器地址、路径、文件名构成。
网络中服务器地址开始为路径的“根”(用“/”)表示,使用分隔符“/”或“\”分隔的不一定是真实的目录名称和文件名。
网络中的“根”路径可以通过服务器软件映射到文件系统中的任意位置,例如 Apache 配置documentRoot更网站根目录。
目录不等路径
根+目录+分隔符+文件名 格式
E:\asdf\sadf\aa.txt 文件系统的
http://localhost/dsaf/ads/index.html 网络系统的
判断路径位置应从路径本身出发,而不是站在目录的角度观察。
在文件系统中目录和文件都是真实存在的,路径与目录和文件的关系是一一对应的,以目录角度确定路径不出有问题。
但是网络中目录和文件不一定真实存在,路径与目录和文件不一定是一一对应的关系,以目录角度确定路径就会出问题。

你可能感兴趣的:(关于Node.js)