框架对比

名称 底层框架 优点 缺点
koa2
express的进化版,async/await 语法,小而美 只提供基础的网络请求和中间件功能,其他功能需要搭配插件
nest express或fastify 基于Express.js的全功能框架,TypeScript,良好的类型提示,IoC、依赖注入、AOC,更新快,社区力量强 新的概念较多,写起来比较繁琐, 限制也很多
egg.js koa2 生成 web 框架的框架,约定大于配置,多进程启动,开发时的热更新 对ts的支持较弱,阿里的重心移交到midway上
midway egg.js、koa2、express egg的TypeScript版,文档友好,支持注解,面向切面编程,阿里项目,可使用egg的生态 项目较新,社区力量不足
新的概念较多
think.js koa2 类似thinkphp的路由解析方式,TypeScript,360项目

开发和发布

前端 本地开发
1. 本地启动应用
2. 使用fiddler代理请求到本地
应用发布
1. 前端合并代码到功能分支
2. 通过前端发布系统发布
3. 获取页面
后端 本地开发 本地启动应用,在localhost进行开发
应用发布 前端页面和后端代码统一在一个代码仓库管理
1. 后端合并代码到功能分支
2. 前端提交页面到功能分支
3. 合并功能分支到主干
4. 将分支发布到测试环境或线上(可选择单独发布或一起发布)
1. 页面发布(后端发布系统)
2. 后端发布(微服务发布系统)
1. 构建docker
2. 发布镜像

回滚

  1. 找出综合提交记录和docker镜像的记录,找出合适的commitId
  2. 根据commitId来确定回滚的位置

后端的docker镜像和commitId相关联,可以根据commitId来统一前端页面和后端代码回滚的位置

前端 根据代码提交记录,回滚页面
后端 根据docker镜像的记录回滚
多机部署,平滑重启
egg.js和midway提供优雅关闭的功能,会自动回收 worker 等进程,等待请求结束后才结束。
其他框架待调查
方案1 方案2
概述 使用docker进行管理
1. 提供性能监控和日志插件
2. 已有可使用的发布平台
3. 可服务化
实现一套切换流量的方案


eggjs + docker 最佳实践

启动参数为

  1. "scripts": {
  2. "start": "egg-scripts start --workers=1 --title=egg-server-some-server"
  3. }

docker-compose.yml大概是这样:

  1. version: '3'
  2. services:
  3. some-server:
  4. image: node:10.16.0
  5. ports:
  6. - "7001"
  7. volumes:
  8. - /etc/localtime:/etc/localtime:ro
  9. - .:/usr/src/app
  10. working_dir: /usr/src/app
  11. command: sh -c "npm run tsc && npm start"
  12. # 或者
  13. # command: npm start
  14. logging:
  15. driver: json-file
  16. options:
  17. max-file: '3'
  18. max-size: 10m
  19. restart: always

主要就是不要后台启动就行了,其他没啥了,标准的Node服务。 node的mvc框架 - 图1node的mvc框架 - 图2node的mvc框架 - 图3node的mvc框架 - 图4node的mvc框架 - 图5