1. 进程通信
  2. cluster集群
  3. 内存管理与回收

js可以做全栈开发的语言
nondejs技术栈.svg
Node.js 几乎是资深前端工程师躲不过去的一道坎,也是一个团队的通用底层能力;
学习 Node 可以更好的使用工具,建立起一套数据中间层服务于整个团队
独立开发完整的小程序,做到闭环,完成一个项目

  • nodejs
  • npm
  • mysql
  • postman
  • navicat
  • modemon & pm2
  1. node 异步异常
    1. 全局异常处理
    2. 异步异常
    3. 同步异常
  2. http
    1. 参数校验
    2. restful API
    3. API使用文档
  3. web框架
    1. express
    2. koa
    3. egg
    4. hapi
  4. mysql ORM框架
    1. sequelize
    2. 模型设计
    3. 模型关系
      1. 一对一
      2. 一对多
  5. 中间件
  6. 代码测试

web核心流程

  1. web - webserver - router - hander - ORM - DB

nodejs 后台

  1. npm i pug -S
  2. ejs
  3. puppeteer
  4. nvm
  5. nvm install v8.9.3
  6. 查看全局安装包
  7. npm list -g --depth 0

爬虫

  1. yarn add jsonp

七牛云

  • 低频存储:针对监控视频之类的
  • 上传的视频会经常被播放,选择正常存储
  • AK & SK
    • AccessKey 存储 key
    • SecretKey 加密key

豆瓣接口

  1. https://movie.douban.com/subject/27119724
  2. 豆瓣 API文档
  3. https://github.com/zce/douban-api-proxy

koa

  1. koa-logger
  2. koa-session
  3. koa-views
  4. koa-router
  5. glob
  6. qiniu node SDK
  7. qiniu-js JS SDK
  8. nanoid
  9. request
  10. request-promise-native

加密

  • 数据库用户名和密码,千万不要用明文
  • MD5, RSA算法, 暴力破解
  1. npm i bcryptjs -S
  2. bcryptjs 跨平台的文件加密工具

模板引擎

vue 全栈电商
https://coding.imooc.com/class/113.html
node全栈入门
https://www.imooc.com/learn/1199
https://coding.imooc.com/class/chapter/342.html#Anchor

  1. nodejs,一个js的运行环境,nodejs = ECMAScript + nodejs API
  2. 运行在服务端,web server
  3. 运行在本地,打包,构建工具
  1. Nodejs究竟是什么?
  2. Nodejs擅长解决哪些实际问题?
  3. Nodejs好在哪里?
  4. Nodejs怎么解决问题的?
  5. 掌握大公司 Nodejs实际应用,web开发中所需要了解的 Nodejs

nodejs.jpg

commonjs规范

  1. module.exports
  2. 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)

  1. <a name="glpZK"></a>
  2. ## Nodejs应用场景
  3. 1. JSON APIs——构建一个Rest/JSON API服务
  4. 1. Node.js可以充分发挥其非阻塞IO模型以及JavaScript对JSON的功能支持
  5. 2. 单页面、多Ajax请求应用——如Gmail
  6. 2. 基于Node.js开发Unix命令行工具
  7. 1. Node.js可以大量生产子进程,并以流的方式输出,这使得它非常适合做Unix命令行工具
  8. 4. 准实时应用系统——如聊天系统、微博系统
  9. - 静态资源服务器,静态资源服务器原理和开发
  10. - 代码本地构建,掌握本地代码构建,打包技巧
  11. - 单元测试,API单元测试
  12. - UI 设计,UI 自动化测试
  13. ![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)
  14. <a name="TAgOY"></a>
  15. ### Nodejs缺点
  16. 1. 不适合:CPU使用率较重,IO使用率较轻的应用,如:
  17. 1. 视频编码
  18. 1. 人工智能等,Node.js的优势无法发挥
  19. <a name="AVgHx"></a>
  20. ## 安装Nodejs
  21. 1. 安装 nodejs
  22. 1. [https://nodejs.org/en/](https://nodejs.org/en/)
  23. 1. Home brew
  24. 2. nodemon 实现热启动
  25. 2. nrm 管理npm源
  26. 2. nvm 管理 nodejs版本
  27. ```bash
  28. npm install nrm nvm -g
  29. npm install nodemon -D

Nodejs基础

  • Nodejs
  • http 协议
  • 调试 & 项目初始化
  • 发布 npm 模块到 npm
  • Nodejs 基础 API
  • Nodejs 核心 API
  • 简单 webServer
  • 单元测试 & 发布
  • Nodejs 爬虫

1.jpg

Nodejs 关键技术

  • Stream 流
  • 动态 web Framework
  • child_process & cluster
  • CPU 密集 & IO 密集是什么
  • Nodejs 工作模型是怎样的
  • 事件驱动是什么?
    • 非异步 IO 模型是什么?
  • child_process & cluste
    • 集群最大限度保持稳定性

Nodejs 框架

  • through2
  • Express & Koa2 & egg
  • SSR & 同构
  • Nodejs 源码

web应用

  1. 路由 Routing
  2. 中间件 Middleware
    1. 自定义中间件
  3. 异常处理
  4. ORM框架 Sequelize

node笔记

  1. koa2框架
  2. pm2 负载均衡
  3. koa-body文件上传中间件
  4. koa-cors 跨域中间件
  5. 使用 Mysql/MongoDB + Redis 数据
  6. 同时配置了 Nginx 作为反向代理

RPC

  1. HTTP 是最常见的 RPC 方式,此外使用最多的是消息队列。
  2. 中型公司使用消息队列的比率最高。
  3. 大公司使用自研 RPC 协议的比率最高
  4. RPC是指远程过程调用
    1. 两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,
    2. 由于不在一个内存空间,不能直接调用,
    3. 需要通过网络来表达调用的语义和传达调用的数据

RPC要解决的问题

  1. 通信问题
  2. 寻址问题
  3. TCP,HTTP,序列化 serialize,编组 marshal
  4. B服务器 反序列化,寻址

bootstrap blog模板

https://www.jianshu.com/p/4a116cf24a05

https://startbootstrap.com/

https://github.com/StartBootstrap/startbootstrap-blog-home

Pandora.js

Node.js 应用监控管理器

CMS功能

  1. 内容管理
    1. 博客模板
  2. 用户管理
  3. 认证管理
    1. 登录页,注册页面
  4. 权限管理
  5. 文件上传
    1. OSS
  6. 邮件系统
  7. 日志系统
  8. 开发规范与工具类

请求响应处理

路由

身份验证

授权

新建一个API接口

参数验证

身份验证

redis缓存

异常就是:程序中不正常的现象。异常包括error和exception两种

编译异常和运行异常

编译异常是指在编译过程中,会出现提示的异常。运行异常是指在运行时出现的异常,并将异常信息反馈控制台

异常处理:

  1. 自己处理(负责)。try_catch捕获异常后,根据程序设定的可能出现异常的位置,执行相应代码。
  2. 抛出异常(不负责)。Throw,抛出异常给调用的人处理
  3. .try中包括的是可能出现异常的代码,异常可能是0个到n个,但是能被catch捕获到的异常只有一个
  4. Try-catch-finally运行流程:
    try表示为可能出现异常的区域,如果出现异常就进入catch相应的异常处理的内容,反之不进入,但是如果有finally的话,不管是不是存在异常,一定运行finally部分内容。需要注意的是,虽然一个try中可以定义多个catch,每个catch中也都是各自不同的异常对象,但是,如果catch中的异常对象具有继承关系,子类异常对象参数必须在父类异常对象参数上面(避免出现向上转型错误的问题
  5. Try-catch和return配合该怎么运行?
    1. try-catch块在return之后,则出现编译异常。
    2. 如果return在try-catch中,程序会按顺序执行,就算执行到return也不会停止,会执行完finally里面的最后一句语句,然后返回执行return语句。(return在try-catch中它不会执行finally括号以外的任何语句)

如何自定义异常类?

  1. 首先创建一个类,并让它继承Exception或者Exception子类,若想创建运行时异常可以继承RuntimeException。
  2. 然后定义两个构造器,一个无参,一个有参,用super分别调用其父类有参和无参的构造器,有参构造器的参数列表使用用于输出错误信息的String变量message。

koa-router

  1. koa路由机制
  2. 路由按模块拆分
  3. requireDirectory 自动加载路由

koa校验层,参数校验

Koa非常精简,没有经过二次开发的Koa,不如 express好用

既提供后台的支撑,也有一套对应的前端系统

  1. 博客页面采用的是:服务端渲染的方式,使用一种 nunjucks模板在服务端完成渲染,然后展示
  2. 服务端渲染的好处:好的 SEO优化排名
  3. 内部使用的 CMS 管理系统,SEO 并不重要

nodemon

  1. nodemon自动重启 Server

koa异常链

  1. 全局异常处理,框架的全局异常处理又是非常的重要的
  2. 异步异常链,try catch来抛出异常,但异常是需要链式来处理的
  3. 异常理论异常链
  4. 异步异常处理方案
  5. 全局异步异常中间件
  6. 已知错误?未知错误?
  7. 规范:定义异常返回格式
  8. HttpException 异常类

koa的异步编程

异步编程

洋葱模型

为什么一定要保证洋葱模型?

koa中间件

中间件只在应用程序启动时初始化一次

强制 promise

深入理解 async & await

prototype原型链查找

  1. core
  2. config
  3. static 静态资源目录
  4. 引导程序
  5. middleware 中间件
  6. api
  7. backend
  8. frontend
  9. models
  10. log 日志
  11. cache 缓存
  12. rbac基于角色的访问控制
  13. views UI
  14. db 数据库
  15. test 测试
  16. utils 工具库

JWT与权限控制

  1. jsonwebtoken
    1. 验证 jwt令牌
  2. HttpBasicAuth传递令牌
  3. API权限分级控制
  4. 微信小程序鉴权,openid,unionid
    1. 根据openid创建微信用户
  5. 小程序如何实现无感知刷新令牌?双 token
    1. access_token,refresh_token双令牌保证无感知登录

Footer

  1. 按需部署,Redis,队列以及启动和部署
  1. 特性 Highlights 资源 Resources 生态圈 Ecosystem
  2. Routing 路由
  3. Template 模板
  4. Serverless PlatForm
  5. Queue Monitor
  6. SaaS APP
  7. Authorazation
  8. Database 数据库
  9. Sequelize ORM
  10. Testing 测试

Laravel Spark Alpha 版本发布了!致力于构建企业级 SaaS 应用

  1. 团队管理、用户权限、通过 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 的主要问题

  1. 写个爬虫要不要换个语言
  2. 想写个脚本把数据库的数据统计一下,压力上去了怎么办
  3. 如果只是想写个几千日活的APP没啥大问题,量上去,PHP的种种不足都体现出来了

nodejs

  1. egg的ts增强版 midway
  2. nest又走Java老路了
    1. typescript
  3. hapi

框架的可扩展性和健壮性

  1. 框架的可扩展性与健壮性如何,都是建立在 http模块之上,又添加了新的东西

框架的开发流程

  1. 用于解决了什么问题?
  2. 适用于什么样的场景?

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

  1. midway的开发重点在midway-faas

nodejs 更没积累。还不容易招人

nodejs的十大框架

  1. koa:基于中间件思维
  2. express
  3. eggjs:国内使用普及
  4. midway:类似 java的 springboot,eggjs的升级版
    1. IOC
    2. web装饰器开发
    3. eggjs + ts
  5. nestjs:ts框架,类似于 angular
  6. fastify:性能比 express高 65%
  7. hapi
  8. meteor
  9. adonis:MVC模式,类似 laravel 的 node.js 框架
  10. feathers:轻量级的 REST 和实时 API 层
  11. sails: ROR框架
  12. loopback: 自动生成增删改查的 node.js 框架
  13. restify:构建 restful API 的框架
  14. keystone

IOC Inversion of Control的缩写,多数书籍翻译成“控制反转”

  1. [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 应用场景多,事件响应高并发,主要用于快速开发,前后端一体化

  1. node大型系统上没优势

go不适合做web开发,只做服务器,并发数可是很强的,高并发

  1. 从容器化演进考虑,首选Golang

python的web开发,效率真的不行,前景不大

nodejs,go这样可以很方便的作为中间件和小型服务的语言迅速崛起

php 快速开发,使用PHP的,多为小公司和外包;生态商业化方面,缺乏巨头公司支持;

  1. 快速开发网站,web开发的热潮已经过去

java 大型应用

大前端+中台的趋势,后台可能会越来越向云平台方向靠拢

前端+serverless

构建大型网站,使用更成熟的语言, 或者拆分服务

水平到了,什么都有前途,web后端的挑战:不是来自语言,而是来自架构

纯后端开发,才是没前途的岗位

爬虫知识点:就一个http请求,获取指定地址得网页内容,用正则表达式,或字符串等按需操作,进行数据分解入库或文件存储

react+ts
go+node

serverless+node

node+ts+react

app后端几乎只有java和go可选

分布式微服务

大数据,人工智能,云原生什么的跟php更加没任何关联

面条式代码(spaghetti code):非结构化和难以维护的源代码的贬义词组

新项目的技术选型

  1. 项目规模:小,大,中型
  2. 项目类型:OGC,电商,博客
  3. 团队规模:技术积累,学习新事物的能力
  4. 语言的生态圈
    1. 发布频率,
    2. 开发路线图

http://www.midwayjs.org/pandora/zh-cn/