Node 从入门到实践开发

Node 概述

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

Node.js 和浏览器上 JS 的区别

Node.js VS 浏览器上的 JS

运行环境不同
API 不同
全局变量不同 window vs global
事件循环

Node.js VS 浏览器上的 JS
Node.js VS 浏览器上的 JS

Node.js 语法概述

Node.js语法是完全基于JavaScript的,下列内容与JS完全一样

  • 数据类型
  • 声明变量和常量
  • 运算符
  • 逻辑结构
  • 函数作用域和闭包
  • 对象和原型
  • 对象分类
  • JS和Node.js的最大不同点在由解释器所提供的扩展对象上!。

数据类型

  • 原始类型:string、number、boolean、null、undefined
  • 引用类型:ES核心对象:Global、String、Number、Boolean、Date、Math、Array、Error、Function、Object、RegExp
  • Node.js对象:Buffer、ReadStream、ClientRequest
  • 自定义对象

Node.js的特点

  • 简单,避免过度设计
  • 单线程逻辑处理
  • 非阻塞的异步I/O处理
  • 事件驱动编程
  • 无锁机制,不会产生死锁
  • 支持数万个并发链接

Node适用于IO密集型的应用,而不适合于CPU密集的应用。

Node全局对象

嵌入在浏览器中的V8引擎,支持ES原生对象、BOM和DOM对象,全局对象为window
Node中的全局对象是global,所有全局变量都是global对象的属性。

global

在交互模式下声明的全局变量和函数都是global对象的成员——全局对象污染
在脚本模式下声明的”全局变量和函数”不是global对象的成员——避免了全局对象污染
脚本模式下,每个.js文件都是一个独立的模块对象,其中创建的“全局变量和函数”都是该对象构造方法内的局部成员

process

当操作系统启动一个程序时,会将必须的可执行文件和数据文件从文件系统调入内存,分配必须的内存空间,执行其中的代码——称为创建了一个执行进程。
— 全局对象global.process就是这个进程的代码表示;
— process对象获取当前操作系统及运行时信息,并操作脚本所在执行进程。

Buffer

Buffer:缓冲区,专用于存储数据的内存区域,用于存储读写的文件数据、网络上要传输的数据等。
Buffer对象的实例,可以直接构建,也可以通过数据读写获得。
能存储字符数据,二进制的字节数据

1
var buf1 = new Buffer.alloc(32);

将 Buffer 内容转换为特定编码的string

1
console.log(buf3.toString('utf8'));

缓冲区:内存的一部分。在内存空间中预留了一定的存储空间,存储空间是用来缓冲输入或输出的数据。
缓冲区分为输入缓冲区和输出缓冲区。

高速设备与低速设备的不匹配,势必会让高速设备花时间等待低俗设备,可以在两者之间设立一个缓存区。

缓冲区的作用:
1.可以解除两者的制约关系,数据可以直接送往缓冲区,高速设备不用在等待低速设备,提高了计算机的效率。
2.可以减少数据的读写次数,如果每次数据只传输一点数据,就需要传送很多次,这样会浪费很多时间,因为开始读写与终止读写所需的时间很长,如果将数据送往缓冲区,待缓冲区满后再进行传送会大大减少读写次数,这样就可以节约很多时间。

缓冲区就是一块内存区,它用在输入输出设备和CPU之间,用来存储数据。它使得低速的输入输出设备和高速的CPU能够协调工作,避免低速的输入输出设备占用CPU,解放出CPU,使其能够高效率工作。

buffer偏重于写
cache偏重于读

全局函数

定时器
global.setTimeout():一次性定时器
global.setInterval():周期性定时器
process.nextTick():本次事件循环结束时立即执行的定时器
global.setImmediate():下次事件循环立即执行的定时器

模块

Node.js中每一个.js文件对应一个模块对象;
模块内声明的变量或函数的作用域是“模块作用域”——默认只能在当前JS文件(即当前模块)中使用,而不是全局作用域;
每个模块可以导出(exports)自己内部的成员提供其它模块使用,也可以引入(require)并使用其他模块中导出的成员;
Node.js启动时运行的第一个模块称为主模块(main module)

模块分类

核心模块
Node.js提供,被编译进二进制执行文件,可以被解释器直接使用,加载速度最快

第三方模块
基于node.js核心模块,第三方扩展应用模块
常用的第三方模块:express、less、webpack

自定义模块
文件式自定义模块
目录式自定义模块

Node.js 的安装运行

在官网上下载,安装点击下一步下一步即可完成安装。

检验是否安装成功,打开命令行窗口。

1
2
3
4
node -v
v10.16.0
npm -v
6.13.7

以上显示为正常。

如果显示没该命令,
你可以尝试在系统变量的 Path 中找寻 node的路径如下图所示。

node 的环境变量配置

阅读更多
You need to set client_id and slot_id to show this AD unit. Please set it in _config.yml.