导图社区 深入NodeJS技术栈(终)
深入NodeJS技术栈(终)Node.js 技术栈 是由作者 “五月君” 于 2019 年 4 月梳理之后最早开源于 Github,同时注册了微信公众号「Nodejs技术栈」。本文档包含了作者从事 Node.js Developer 以来的学习历程,旨在为大家提供一个较详细的学习教程,侧重点更倾向于 Node.js 服务端所涉及的技术栈。
编辑于2021-04-09 20:17:07深入Node.js技术栈
一. 邂逅Node开发
1. 为什么学习Node
Node的起源
Node的发展
Node和JavaScript
和浏览器执行的区别
2. Node的应用场景
前后端页面渲染
支持项目同构开发
对于需要进行首屏优化、SEO的页面进行后端渲染
开发命令行工具
webpack、gulp等都是基于Node
开发自己独立的命令行工具(类似于shell、Python做的事情,对于前端更加友好)
桌面应用的开发
类似于VSCode这种强大的桌面应用
设置开发桌面端类似于wayward大型游戏
进行服务器开发
拥有类似express、koa等强大的web框架
开发Web Socket等服务器
3. Node的主要特点
异步的IO
事件机制
单线程
跨平台
4. Node开发初体验
安装Node
初始化Node项目
package.json文件剖析
Hello Nodejs
二. Node核心知识
1. 常用全局变量
__filename
__dirname
setTimeout
clearTimeout
setInterval
console
process
等等..
2. 模块化开发
JavaScript模块化规范
CommonJS规范
AMD规范
CMD规范
ES6规范
Node模块化实现
CommonJS使用
module
exports
require
global
和ES6对比区别
值的拷贝和引用对比
运行时加载和编译时加载
3. 模块的管理
常见的内置模块
path
util
fs
events
...
npm、yarn工具
工具的安装、区别
常用的命令
发布自己的npm包
注册registry
开发自己的包
发布npm包
更新npm包
删除npm包
4. 脚本工具开发
编写Node脚本
制作命令行工具
编写辅助功能命令
-v查看版本
-h查看帮助
等等..
ejs模块学习
安装ejs模块引擎
ejs语法学习
自动创建Vue组件
Vue组件esj模块文件
添加组件命令
生成vue组件文件
自动创建vue页面
Vue页面ejs模块文件
路由ejs模块文件
添加页面命令
修改路由文件
自动创建store文件
store的ejs模块文件
添加store命令
生成store文件
5. Buffer的使用
认识Buffer的作用
什么是Buffer
Buffer的应用场景
认识字符编码
Buffer的使用过程
创建Buffer
Buffer和字符编码
字符串和Buffer相互转换
Buffer的内存分配
Buffer内存分配原理
6. Node原理解析
进程和线程
进程
什么是进程
多进程开发
线程
什么是线程
多线程开发
线程和进程的区别
阻塞和非阻塞
阻塞和非阻塞概念比较
阻塞和非阻塞代码方式
并发和吞吐量带来的问题
事件循环机制
事件循环阶段解析
Timers阶段
Pending 阶段
Idle 和Prepare 阶段
Poll 阶段
Check 阶段
Close 阶段
产生回调三个阶段
Timers
setInterval()
setTimeout()
Poll
所有非阻塞 I/O 请求回调都会在 Poll 阶段运行。
Check
setImmediate()
微任务回调
process.nextTick()
Promise.resolve().then()
非阻塞异步IO
为什么需要异步IO
执行时间
资源利用
阻塞IO和非阻塞IO
阻塞IO的调用过程
缺点
优点
非阻塞IO的调用过程
缺点
获取不到完整的数据
需要CPU去轮训的来查看数据是否读取完成
事实上是一种CPU资源的浪费
优点
轮训技术实现方案
read
select
poll
epoll
kqueue
非阻塞异步IO实现
*nix使用自定义线程池
window使用IOCP异步IO模型
三. Web开发基础
1. web服务基础
http模块
createServer
请求对象request
响应对象response
web基础
请求方法
路径解析
header
查询字符串
会话状态
cookie
session
2.express使用
express介绍和安装
express诞生和介绍
express的安装
express基本使用
创建服务
处理请求
express进阶使用
处理路由
中间件
静态资源
等等...
3. koa的使用
koa的介绍和安装
koa的诞生和介绍
koa和express的对比
koa的安装
koa的基本使用
创建服务
处理请求
koa进阶使用
处理路由
中间件
静态资源
错误处理
等等...
四. MySQL的使用
1. 数据库的介绍
数据存储概述
内存存储
文件存储
数据库存储
....
常见的数据库
MySQL
Oracle
SQL Server
SQLite
MongoDB
Redis
....
关系型数据库
数据库(Database)
表(Table)
列(Column、Field)
行(Row、Record)
2. MySQL安装配置
MySQL的下载
MySQL的安装
MySQL的配置
3. SQL语句操作数据库
SQL语句概述
全称Structured Query Language
结构化查询语言
SQL语句的规则
常用数据类型
数字类型
字符串类型
日期类型
概念和关键字
主键(PRIMARY KEY)
外键(FOREIGN KEY)
其他属性
DEFAULT
NOT NULL
AUTO_INCREMENT
等等...
DDL语句操作
创建(CREATE)
修改(ALTER)
删除(DROP)
DML语句操作
插入(INSERT)
修改(UPDATE)
删除(DELETE)
DQL语句操作
查询(SELECT)
WHERE语句用法
排序、分页等
聚合查询
多表查询
内连接
外连接
并集
4. GUI工具MySQL操作
GUI工具的安装和使用
GUI工具中数据库操作
创建数据库
创建Table
Table操作
增删改查操作
GUI工具中SQL语句演练
5. Node对MySQL操作
数据库驱动
认识数据库驱动
安装mysql2数据库驱动
连接数据库
数据库驱动连接数据库
createConnection
创建数据库连接池
createPool
连接失败错误处理
数据库操作
插入(INSERT)
修改(UPDATE)
删除(DELETE)
查询(SELECT)
WHERE语句用法
排序、分页等
五. Koa项目实战
1. 用户管理系统
用户注册功能
创建用户管理表
注册用户路由
定义注册用户接口
检测用户是否存在中间件
密码加密算法和密码存储
用户登录功能
定义用户登录接口
验证账号和密码
身份认证功能
认识JWT是什么
JWT的身份认证
JWT的令牌签发
验证令牌中间件
等等...
访问权限控制
访问控制中间件
指定用户访问权限
2.内容管理系统
发布内容功能
创建内容管理表
注册内容路由
定义发布内容接口
验证发布内容接口
修改内容功能
定义修改内容接口
测试发布内容接口
删除内容功能
定义删除内容接口
验证删除内容接口
查找内容功能
查询特定用户内容接口
SQL高级查询
SQL转换JSON
统计内容数量总和接口
内容分页查询功能接口
查询所有用户内容接口
验证所有内容接口
3. 内容评论管理
发布评论功能
创建评论管理表
注册评论路由
定义发布评论接口
验证发布评论接口
评论回复功能
定义评论回复接口
检测评论是否为回复评论接口
验证回复评论接口
修改评论功能
定义修改评论接口
测试修改评论接口
删除评论功能
定义删除评论接口
验证删除评论接口
4. 内容标签管理
创建标签功能
创建标签管理表
定义创建标签接口
验证创建标签接口
内容标签功能
创建内容与标签关系管理表
定义存储内容标签接口
验证为内容添加标签接口
修改标签功能
定义修改标签接口
验证修改标签接口
删除标签功能
定义删除标签接口
验证删除标签接口
5. 文件管理系统
文件上传功能
创建文件信息存储表
定义文件上传接口
定义获取文件信息接口
图片处理功能
读取图片原始信息
存储图片原始信息
提供不同存储图片
large图片
medium图片
thumbnail图片
用户头像功能
定义头像上传接口
头像图片文件处理
创建头像数据管理表
定义获取头像接口
测试上述接口信息
内容配图管理
定义内容图片上传接口
内容图片文件处理
创建内容图片数据管理表
修改获取内容时配图信息接口
测试上述接口信息
6. 功能补充说明
以上功能为暂定讲解功能
更多新功能都比较类似,可以在课下自行扩展
六. Koa项目部署
1. 云服务器概述
认识云服务器
购买云服务器
2. 云服务的配置
远程连接云服务器
远程云服务器配置
3. 项目自动化部署
项目的手动部署
PM2工具Node进程管理
自动化部署流程
Jenkins安装配置
Jenkins配置自动化部署