框架设计

实现概要

  • koa2 搭建服务
  • MySQL作为数据库
    • mysql 5.7 版本
    • 储存普通数据
    • 存储session登录态数据
  • 渲染
    • 服务端渲染:ejs作为服务端渲染的模板引擎
    • 前端渲染:用webpack4环境编译react.js动态渲染页面,使用ant-design框架

文件目录设计

demo源码

https://github.com/ChenShenhai/koa2-note/blob/master/demo/project/

  1. ├── init # 数据库初始化目录
  2. ├── index.js # 初始化入口文件
  3. ├── sql/ # sql脚本文件目录
  4. └── util/ # 工具操作目录
  5. ├── package.json
  6. ├── config.js # 配置文件
  7. ├── server # 后端代码目录
  8. ├── app.js # 后端服务入口文件
  9. ├── codes/ # 提示语代码目录
  10. ├── controllers/ # 操作层目录
  11. ├── models/ # 数据模型model层目录
  12. ├── routers/ # 路由目录
  13. ├── services/ # 业务层目录
  14. ├── utils/ # 工具类目录
  15. └── views/ # 模板目录
  16. └── static # 前端静态代码目录
  17. ├── build/ # webpack编译配置目录
  18. ├── output/ # 编译后前端代码目录&静态资源前端访问目录
  19. └── src/ # 前端源代码目录

入口文件预览

  1. const path = require('path')
  2. const Koa = require('koa')
  3. const convert = require('koa-convert')
  4. const views = require('koa-views')
  5. const koaStatic = require('koa-static')
  6. const bodyParser = require('koa-bodyparser')
  7. const koaLogger = require('koa-logger')
  8. const session = require('koa-session-minimal')
  9. const MysqlStore = require('koa-mysql-session')
  10. const config = require('./../config')
  11. const routers = require('./routers/index')
  12. const app = new Koa()
  13. // session存储配置
  14. const sessionMysqlConfig= {
  15. user: config.database.USERNAME,
  16. password: config.database.PASSWORD,
  17. database: config.database.DATABASE,
  18. host: config.database.HOST,
  19. }
  20. // 配置session中间件
  21. app.use(session({
  22. key: 'USER_SID',
  23. store: new MysqlStore(sessionMysqlConfig)
  24. }))
  25. // 配置控制台日志中间件
  26. app.use(convert(koaLogger()))
  27. // 配置ctx.body解析中间件
  28. app.use(bodyParser())
  29. // 配置静态资源加载中间件
  30. app.use(convert(koaStatic(
  31. path.join(__dirname , './../static')
  32. )))
  33. // 配置服务端模板渲染引擎中间件
  34. app.use(views(path.join(__dirname, './views'), {
  35. extension: 'ejs'
  36. }))
  37. // 初始化路由中间件
  38. app.use(routers.routes()).use(routers.allowedMethods())
  39. // 监听启动端口
  40. app.listen( config.port )
  41. console.log(`the server is start at port ${config.port}`)