charleyup

为自己吹过的🐮🍺奋斗终生.

nodejs工程化建站总结(koa2博客)

2017/12/21

每个程序员都应该拥有一个属于自己的博客。

前言

一直以来都对开发博客情有独钟,这已经是v3.0了,一方面是享受开发的乐趣,另一方面是为了记录、分享工作&生活。

规划

总结前两个版本express+vue及nuxt+egg踩过的坑,对于v3.0,我列了几个构想:

  • 服务端渲染
  • ORM框架
  • 工程化
  • 自动化

对SSO有强需求的博客项目,客户端渲染的技术选型应该首先被pass,nuxt+egg足够优秀,只是对于个人项目来说,一个人要维护两份代码、两个服务并不是太友好。因此,v3.0,我采用koa2+模版引擎,服务端渲染的方案。

技术选型

  • koa.js
  • pug
  • mysql
  • sequelize.js
  • travis
  • nginx

目录结构

├── app
│   ├── controller          # 控制器(controller)层
│   ├── model               # sequelize模型
│   ├── service             # 服务(service)层
│   ├── views               # 视图、页面、模板
│   ├── app.js              # koa实例
│   ├── index.js            # 入口文件
│   └── router.js           # 路由
├── database
│   ├── migrations          # sequelize migrations
│   └── config.json         # 数据库配置
├── static                  # 静态资源
├── test                    # 测试用例
│   └── app.test.js
├── .babelrc                # babel配置
├── .eslintrc.js            # eslint配置
├── .gitignore              # gitignore
├── .sequelizerc            # sequelize配置
├── .travis.yml             # tranvis配置
├── index.js                # mian
├── README.md
├── id_rsa_travis
├── package.json
└── yarn.lock

说明介绍

比较常规的koa项目,app文件夹包括了整个koa实例,目录结构上如上一部分,主要区分controller、service、model、views、router等,controller负责处理简单的输入、输出,核心业务逻辑放在service层,model为各个模块的模型,views是输出的视图页面,router则为路由。

项目中还引入了Node.js ORM框架——sequelize,负责数据库的各种事务支持、关系关联、读取、复制、迁移等。

Eslint和自动化测试也都是工程化不可或缺的一环了,在git pre-push和pre-commit钩子中都会执行代码检测及单元测试脚本,确保不会将不完善的代码提交上去。

最后,通过travis实现自动化部署。当master分支代码有变动时,自动SSH到服务器上拉取项目最新代码、安装依赖、重启应用。

Sequelize介绍

初始化数据库及Migrations

mysql -u root -e "CREATE DATABASE IF NOT EXISTS `charleyup.com`";

创建数据表

npx sequelize migration:generate --name=init-posts

执行完后会在database/migrations目录下生成一个 migration 文件(${timestamp}-init-users.js),我们修改它来处理初始化posts表。

升级数据库

npx sequelize db:migrate

性能优化

TODO

总结

简单总结了下,demo代码可前往github查看,有任何问题欢迎邮件我讨论。