- 进程通信
- cluster集群
- 内存管理与回收
js可以做全栈开发的语言
Node.js 几乎是资深前端工程师躲不过去的一道坎,也是一个团队的通用底层能力;
学习 Node 可以更好的使用工具,建立起一套数据中间层服务于整个团队
独立开发完整的小程序,做到闭环,完成一个项目
- nodejs
- npm
- mysql
- postman
- navicat
- modemon & pm2
- node 异步异常
- 全局异常处理
- 异步异常
- 同步异常
- http
- 参数校验
- restful API
- API使用文档
- web框架
- express
- koa
- egg
- hapi
- mysql ORM框架
- sequelize
- 模型设计
- 模型关系
- 一对一
- 一对多
- 中间件
- 代码测试
- Node.js 调试指南,这是一本专注于讲解 Node 调试的书籍,已经出版了,但是可以开源免费阅读。
- Node.js:来一打 C++ 扩展,死月出版的书籍,没什么好说的,看就是了。
- Node.js 最佳实践,这是对 Node.js 最佳实践中排名最高的内容的总结和分享
- the-book-of-secret-knowledge,这是一份安全领域的资料
web核心流程
web - webserver - router - hander - ORM - DB
nodejs 后台
npm i pug -S
ejs
puppeteer
nvm
nvm install v8.9.3
查看全局安装包
npm list -g --depth 0
爬虫
- puppeteer
- pm2 进程管理
- mongoose https://github.com/Automattic/mongoose
- 七牛 https://github.com/qiniu/nodejs-sdk
yarn add jsonp
七牛云
- 低频存储:针对监控视频之类的
- 上传的视频会经常被播放,选择正常存储
- AK & SK
- AccessKey 存储 key
- SecretKey 加密key
豆瓣接口
https://movie.douban.com/subject/27119724
豆瓣 API文档
https://github.com/zce/douban-api-proxy
koa
koa-logger
koa-session
koa-views
koa-router
glob
qiniu node SDK
qiniu-js JS SDK
nanoid
request
request-promise-native
加密
- 数据库用户名和密码,千万不要用明文
- MD5, RSA算法, 暴力破解
npm i bcryptjs -S
bcryptjs 跨平台的文件加密工具
模板引擎
- ejs
- pug https://github.com/pugjs/pug
vue 全栈电商
https://coding.imooc.com/class/113.html
node全栈入门
https://www.imooc.com/learn/1199
https://coding.imooc.com/class/chapter/342.html#Anchor
- nodejs,一个js的运行环境,nodejs = ECMAScript + nodejs API
- 运行在服务端,web server
- 运行在本地,打包,构建工具
- Nodejs究竟是什么?
- Nodejs擅长解决哪些实际问题?
- Nodejs好在哪里?
- Nodejs怎么解决问题的?
- 掌握大公司 Nodejs实际应用,web开发中所需要了解的 Nodejs
commonjs规范
- module.exports
- require()
```jsx
// add.js
function add (a, b) {
return a + b
} module.exports = add module.exports = { add, minus } // 导出多个
// parent.js const add = require(‘./add.js’) const sum = add(10, 20)
<a name="glpZK"></a>
## Nodejs应用场景
1. JSON APIs——构建一个Rest/JSON API服务
1. Node.js可以充分发挥其非阻塞IO模型以及JavaScript对JSON的功能支持
2. 单页面、多Ajax请求应用——如Gmail
2. 基于Node.js开发Unix命令行工具
1. Node.js可以大量生产子进程,并以流的方式输出,这使得它非常适合做Unix命令行工具
4. 准实时应用系统——如聊天系统、微博系统
- 静态资源服务器,静态资源服务器原理和开发
- 代码本地构建,掌握本地代码构建,打包技巧
- 单元测试,API单元测试
- UI 设计,UI 自动化测试
![1.jpg](https://cdn.nlark.com/yuque/0/2019/jpeg/112859/1575555867245-75ac7332-e514-4d1f-bbb3-6b814ba5849a.jpeg#crop=0&crop=0&crop=1&crop=1&height=143&id=wHzts&name=1.jpg&originHeight=285&originWidth=762&originalType=binary&ratio=1&rotation=0&showTitle=false&size=39511&status=done&style=none&title=&width=381)
<a name="TAgOY"></a>
### Nodejs缺点
1. 不适合:CPU使用率较重,IO使用率较轻的应用,如:
1. 视频编码
1. 人工智能等,Node.js的优势无法发挥
<a name="AVgHx"></a>
## 安装Nodejs
1. 安装 nodejs
1. [https://nodejs.org/en/](https://nodejs.org/en/)
1. Home brew
2. nodemon 实现热启动
2. nrm 管理npm源
2. nvm 管理 nodejs版本
```bash
npm install nrm nvm -g
npm install nodemon -D
Nodejs基础
- Nodejs
- http 协议
- 调试 & 项目初始化
- 发布 npm 模块到 npm
- Nodejs 基础 API
- Nodejs 核心 API
- 简单 webServer
- 单元测试 & 发布
- Nodejs 爬虫
Nodejs 关键技术
- Stream 流
- 动态 web Framework
- child_process & cluster
- CPU 密集 & IO 密集是什么
- Nodejs 工作模型是怎样的
- 事件驱动是什么?
- 非异步 IO 模型是什么?
- child_process & cluste
- 集群最大限度保持稳定性
Nodejs 框架
- through2
- Express & Koa2 & egg
- SSR & 同构
- Nodejs 源码
web应用
- 路由 Routing
- 中间件 Middleware
- 自定义中间件
- 异常处理
- ORM框架 Sequelize
node笔记
- koa2框架
- pm2 负载均衡
- koa-body文件上传中间件
- koa-cors 跨域中间件
- 使用 Mysql/MongoDB + Redis 数据
- 同时配置了 Nginx 作为反向代理
RPC
- HTTP 是最常见的 RPC 方式,此外使用最多的是消息队列。
- 中型公司使用消息队列的比率最高。
- 大公司使用自研 RPC 协议的比率最高
- RPC是指远程过程调用
- 两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,
- 由于不在一个内存空间,不能直接调用,
- 需要通过网络来表达调用的语义和传达调用的数据
RPC要解决的问题
- 通信问题
- 寻址问题
- TCP,HTTP,序列化 serialize,编组 marshal
- B服务器 反序列化,寻址
bootstrap blog模板
https://www.jianshu.com/p/4a116cf24a05
https://github.com/StartBootstrap/startbootstrap-blog-home
Pandora.js
Node.js 应用监控管理器
CMS功能
- 内容管理
- 博客模板
- 用户管理
- 认证管理
- 登录页,注册页面
- 权限管理
- 文件上传
- OSS
- 邮件系统
- 日志系统
- 开发规范与工具类
请求响应处理
路由
身份验证
授权
新建一个API接口
参数验证
身份验证
redis缓存
异常就是:程序中不正常的现象。异常包括error和exception两种
编译异常和运行异常
编译异常是指在编译过程中,会出现提示的异常。运行异常是指在运行时出现的异常,并将异常信息反馈控制台
异常处理:
- 自己处理(负责)。try_catch捕获异常后,根据程序设定的可能出现异常的位置,执行相应代码。
- 抛出异常(不负责)。Throw,抛出异常给调用的人处理
- .try中包括的是可能出现异常的代码,异常可能是0个到n个,但是能被catch捕获到的异常只有一个
- Try-catch-finally运行流程:
try表示为可能出现异常的区域,如果出现异常就进入catch相应的异常处理的内容,反之不进入,但是如果有finally的话,不管是不是存在异常,一定运行finally部分内容。需要注意的是,虽然一个try中可以定义多个catch,每个catch中也都是各自不同的异常对象,但是,如果catch中的异常对象具有继承关系,子类异常对象参数必须在父类异常对象参数上面(避免出现向上转型错误的问题 - Try-catch和return配合该怎么运行?
- try-catch块在return之后,则出现编译异常。
- 如果return在try-catch中,程序会按顺序执行,就算执行到return也不会停止,会执行完finally里面的最后一句语句,然后返回执行return语句。(return在try-catch中它不会执行finally括号以外的任何语句)
如何自定义异常类?
- 首先创建一个类,并让它继承Exception或者Exception子类,若想创建运行时异常可以继承RuntimeException。
- 然后定义两个构造器,一个无参,一个有参,用super分别调用其父类有参和无参的构造器,有参构造器的参数列表使用用于输出错误信息的String变量message。
koa-router
- koa路由机制
- 路由按模块拆分
- requireDirectory 自动加载路由
koa校验层,参数校验
Koa非常精简,没有经过二次开发的Koa,不如 express好用
既提供后台的支撑,也有一套对应的前端系统
- 博客页面采用的是:服务端渲染的方式,使用一种 nunjucks模板在服务端完成渲染,然后展示
- 服务端渲染的好处:好的 SEO优化排名
- 内部使用的 CMS 管理系统,SEO 并不重要
nodemon
- nodemon自动重启 Server
koa异常链
- 全局异常处理,框架的全局异常处理又是非常的重要的
- 异步异常链,try catch来抛出异常,但异常是需要链式来处理的
- 异常理论异常链
- 异步异常处理方案
- 全局异步异常中间件
- 已知错误?未知错误?
- 规范:定义异常返回格式
- HttpException 异常类
koa的异步编程
异步编程
洋葱模型
为什么一定要保证洋葱模型?
koa中间件
中间件只在应用程序启动时初始化一次
强制 promise
深入理解 async & await
prototype原型链查找
core
config
static 静态资源目录
引导程序
middleware 中间件
api
backend
frontend
models
log 日志
cache 缓存
rbac基于角色的访问控制
views UI层
db 数据库
test 测试
utils 工具库
JWT与权限控制
- jsonwebtoken
- 验证 jwt令牌
- HttpBasicAuth传递令牌
- API权限分级控制
- 微信小程序鉴权,openid,unionid
- 根据openid创建微信用户
- 小程序如何实现无感知刷新令牌?双 token
- access_token,refresh_token双令牌保证无感知登录
Footer
- 按需部署,Redis,队列以及启动和部署
特性 Highlights 资源 Resources 生态圈 Ecosystem
Routing 路由
Template 模板
Serverless PlatForm
Queue Monitor
SaaS APP
Authorazation
Database 数据库
Sequelize ORM
Testing 测试
Laravel Spark Alpha 版本发布了!致力于构建企业级 SaaS 应用
- 团队管理、用户权限、通过 Stripe 计费(构建支付系统)等
Laravel:轮子多,社区氛围很好,很多问题基本都有轮子,代码优雅规范
YII
Yii 自带了 丰富的功能,包括 MVC,DAO/ActiveRecord,I18N/L10N,缓存,身份验证和基于角色的访问控制,脚手架,测试等,可显著缩短开发时间
Gii 工具可以快速生成 CURD、模型代码,写管理后台真的很省心。Yii2 的代码注释非常详细,可以当做文档看
PHP
php 好在有大量现成可用的Web 1.0/2.0产品,建站做CMS超快。但是移动开发领域的积累太少,基本上没现成的
好招人 现成框架多 开发速度快
初创公司,招不到人是致命的
只写 api 服务的话,有好用的 orm 就行,啥语言差别都不大
从开源代码 (Github & NPM) 来学习 Node.js
php 的主要问题
- 写个爬虫要不要换个语言
- 想写个脚本把数据库的数据统计一下,压力上去了怎么办
- 如果只是想写个几千日活的APP没啥大问题,量上去,PHP的种种不足都体现出来了
nodejs
- egg的ts增强版 midway
- nest又走Java老路了
- typescript
- hapi
框架的可扩展性和健壮性
- 框架的可扩展性与健壮性如何,都是建立在 http模块之上,又添加了新的东西
框架的开发流程
- 用于解决了什么问题?
- 适用于什么样的场景?
Web 场景(IO 密集)有得天独厚的优势
Web、Server、App 等全端解决用户体验问题
线上页面的模板渲染,或者数据模型转换(BFF
Back-end For Front-end
客户端产品:[Electron
写一些命令行工具、Web 应用,辅助日常的工作
性能优化 (58%)、内存泄漏 (42.4%) 以及 Debug
前端学习 python、php 等语言也可以做,但持续学习一个并不会经常用的语言需要一定成本,一门语言的掌握除了学习基本语法,还需要关注社区的发展,Node 使用 JavaScript 对前端无疑更友好
对模块加载器有写负担(需要分析 .js .json .node)
- 大公司内会有更多的人使用 Node.js 进行工具 & 自动化开发。
- 跨平台的,中小公司会更乐意在移动应用中尝试 Node.js
- 87.50% 使用 Node.js 开发服务端 API
- 有 51.19% 的人开发 CLI & 工具
- SSR 场景中使用 Node.js
nodejs参考资料
https://zhuanlan.zhihu.com/p/152238382
faas
- midway的开发重点在midway-faas
nodejs 更没积累。还不容易招人
nodejs的十大框架
- koa:基于中间件思维
- express
- eggjs:国内使用普及
- midway:类似 java的 springboot,eggjs的升级版
- IOC
- web装饰器开发
- eggjs + ts
- nestjs:ts框架,类似于 angular
- fastify:性能比 express高 65%
- hapi
- meteor
- adonis:MVC模式,类似 laravel 的 node.js 框架
- feathers:轻量级的 REST 和实时 API 层
- sails: ROR框架
- loopback: 自动生成增删改查的 node.js 框架
- restify:构建 restful API 的框架
- keystone
IOC Inversion of Control的缩写,多数书籍翻译成“控制反转”
[https://blog.csdn.net/ivan820819/article/details/79744797](https://blog.csdn.net/ivan820819/article/details/79744797)
HMR (Hot Module Replacement
你不会找到一份基于javascript语言的纯后端开发工作,这个非常小众,Java/PHP/Python都有不同的占比。都在相当长的时间里不会被取代
纯Web后端领域,实际上要掌握的东西很多,绝非一门语言就可以决定有没有前途
nodejs 应用场景多,事件响应高并发,主要用于快速开发,前后端一体化
- node大型系统上没优势
go不适合做web开发,只做服务器,并发数可是很强的,高并发
- 从容器化演进考虑,首选Golang
python的web开发,效率真的不行,前景不大
nodejs,go这样可以很方便的作为中间件和小型服务的语言迅速崛起
php 快速开发,使用PHP的,多为小公司和外包;生态商业化方面,缺乏巨头公司支持;
- 快速开发网站,web开发的热潮已经过去
java 大型应用
大前端+中台的趋势,后台可能会越来越向云平台方向靠拢
前端+serverless
构建大型网站,使用更成熟的语言, 或者拆分服务
水平到了,什么都有前途,web后端的挑战:不是来自语言,而是来自架构
纯后端开发,才是没前途的岗位
爬虫知识点:就一个http请求,获取指定地址得网页内容,用正则表达式,或字符串等按需操作,进行数据分解入库或文件存储
react+ts
go+node
serverless+node
node+ts+react
app后端几乎只有java和go可选
分布式微服务
大数据,人工智能,云原生什么的跟php更加没任何关联
面条式代码(spaghetti code):非结构化和难以维护的源代码的贬义词组
新项目的技术选型
- 项目规模:小,大,中型
- 项目类型:OGC,电商,博客
- 团队规模:技术积累,学习新事物的能力
- 语言的生态圈
- 发布频率,
- 开发路线图