- 进程通信
 - 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 -Sejspuppeteernvmnvm 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-loggerkoa-sessionkoa-viewskoa-routerglobqiniu node SDKqiniu-js JS SDKnanoidrequestrequest-promise-native
加密
- 数据库用户名和密码,千万不要用明文
 - MD5, RSA算法, 暴力破解
 
npm i bcryptjs -Sbcryptjs 跨平台的文件加密工具
模板引擎
- 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请求应用——如Gmail2. 基于Node.js开发Unix命令行工具1. Node.js可以大量生产子进程,并以流的方式输出,这使得它非常适合做Unix命令行工具4. 准实时应用系统——如聊天系统、微博系统- 静态资源服务器,静态资源服务器原理和开发- 代码本地构建,掌握本地代码构建,打包技巧- 单元测试,API单元测试- UI 设计,UI 自动化测试<a name="TAgOY"></a>### Nodejs缺点1. 不适合:CPU使用率较重,IO使用率较轻的应用,如:1. 视频编码1. 人工智能等,Node.js的优势无法发挥<a name="AVgHx"></a>## 安装Nodejs1. 安装 nodejs1. [https://nodejs.org/en/](https://nodejs.org/en/)1. Home brew2. nodemon 实现热启动2. nrm 管理npm源2. nvm 管理 nodejs版本```bashnpm install nrm nvm -gnpm 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原型链查找
coreconfigstatic 静态资源目录引导程序middleware 中间件apibackendfrontendmodelslog 日志cache 缓存rbac基于角色的访问控制views UI层db 数据库test 测试utils 工具库
JWT与权限控制
- jsonwebtoken
- 验证 jwt令牌
 
 - HttpBasicAuth传递令牌
 - API权限分级控制
 - 微信小程序鉴权,openid,unionid
- 根据openid创建微信用户
 
 - 小程序如何实现无感知刷新令牌?双 token
- access_token,refresh_token双令牌保证无感知登录
 
 
Footer
- 按需部署,Redis,队列以及启动和部署
 
特性 Highlights 资源 Resources 生态圈 EcosystemRouting 路由Template 模板Serverless PlatFormQueue MonitorSaaS APPAuthorazationDatabase 数据库Sequelize ORMTesting 测试
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,电商,博客
 - 团队规模:技术积累,学习新事物的能力
 - 语言的生态圈
- 发布频率,
 - 开发路线图
 
 
