这是我参与更文挑战的第12天,活动详情查看: 更文挑战
这个 Node.js 入门系列不知不觉已经写到第九篇了,九为数之极,那么现在就来做一下阶段总结吧!
初识 Node
在 Node.js 入门系列(一)初识 Node 中对 Node.js 有了一个基础的了解:
- Node.js 是运行在服务端的 JavaScript,是一个 基于 Chrome V8 引擎 的 JavaScript 运行环境,使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
- 它让我们类似使用 JavaScript 控制浏览器的方式控制 整个计算机。在 Node.js 里写 JS 和在 Chrome 里写 JS,几乎没有什么不一样的。
- Node.js 可以用来开发 Web 服务;可以用来构建工作流;也可以用来自定义模块扩展大型应用。
- 环境准备需要安装 Node.js 和 编码软件(VSCode),当然还有浏览器 Chrome;另外,推荐用 nvm 管理本地开发机器上的 node 版本。
- Node.js 可以通过命令行
node index.js
把index.js
文件运行起来。
Node 模块规范
- Node.js 的模块规范就是 CommonJS 模块规范。
- CommonJS 模块规范通过
require()
加载模块,默认返回一个对象,可以通过设置exports
或module.exports
设置模块返回的数据;其中module.exports
的优先级要高于exports
。- 使用方式:
const http = require('http')
- 使用方式:
- Node.js 的包管理工具是
npm
,可通过使用镜像cnpm
来提高下载速度。npm
初始化:通过npm init -y
生成package.json
文件- 下载安装依赖包
<packageName>
:npm install <packageName>
;如果想要全局安装则添加-g
:npm install <packageName> -g
。如安装glob
包:npm install glob
- 卸载依赖包的命令是
npm uninstall <packageName>
Node 异步
- I/O 即
Input
/Output
,一个系统的输入和输出。要理解非阻塞 I/O 主要在于确定一个进行 I/O 的系统,然后思考判断能不能进行其它 I/O。 - Node.js 异步编程的规范是第一个参数是
error
,后面的才是结果。 - Node.js 的事件循环在 Node11 版本及之后是和浏览器的事件循环运行一致的,要注意区分。
- 如果是 Node10 及其之前版本:宏队列当中的有几个宏任务,是要等到宏队列当中的所有宏任务全部执行完毕才会去执行微队列当中的微任务
- 如果是 Node11 及之后版本:一旦执行一个阶段里对应宏队列当中的一个宏任务(
setTimeout
,setInterval
和setImmediate
三者其中之一,不包括I/O)就立刻执行微任务队列,执行完微队列当中的所有微任务再回到刚才的宏队列执行下一个宏任务。
Promise
是一个状态机,初始状态为pending
,一旦确定状态为resolved
或rejected
就不会改变,可以通过.then
和.catch
进行链式调用。async
/await
以同步的方式写异步,是异步编程的终极解决方案。
HTTP 服务
- HTTP 协议即 超文本传输协议,一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。
- 在 Node.js 中,HTTP 服务要做的是解析进来的 HTTP 请求报文和返回对应的 HTTP 返回报文。
- 通过
http.createServer()
可以创建一个简单的 Web 静态服务器,通过.listen(3000)
监听服务端口。
HTTP 服务框架
目前比较流行的 Node.js 框架有 Express
、Koa
和 Egg.js
,无论是哪个 Node.js 框架,都是基于中间件来实现的,而中间件的执行方式就需要依据洋葱模型。
- 洋葱模型 是先一层层向内穿入洋葱表皮进入中心点,然后再从中心点一层层向外穿出表皮。
Express
框架的一些核心功能:
- 路由:将对应路由分开作为模块处理
request
/response
属性的简化,让我们不需要经过转换,然后直接使用对应的属性。- 使用中间件(
next()
)可以更好地组织流程代码,但是异步会打破Express
的洋葱模型
Koa
框架的一些核心功能:
- 比
Express
更极致的request
/response
简化。 - 使用
async function
实现的中间件。 - 有“暂停执行”的能力。
- 在异步的情况下也符合洋葱模型。
- 精简内核,所有额外功能都移到中间件里实现。
Koa
框架和 Express
框架之间并没有优劣之分,它们都有自己的适用场景。
Express
门槛更低,Koa
更强大优雅。Express
封装更多东西,开发更快速,Koa
可定制型更高。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END