1. pnpm init -y
  2. pnpm i koa @koa/router koa-body sequelize

目录结构

配置文件

// config.js

  1. module.exports = {
  2. // 环境变量,默认为dev
  3. // 项目上线之后,要把这里改为 prod
  4. environment: 'dev',
  5. // 数据库配置
  6. database: {
  7. dbName: 'koa-cms-server',
  8. host: 'localhost',
  9. port: 3306,
  10. user: 'root',
  11. password: 'zlylele123'
  12. }
  13. }
  1. "scripts": {
  2. "dev": "nodemon ./src/index",
  3. "start": "pm2 start ./src/index",
  4. }

src/model/index.js

连接数据库

  1. const Sequelize = require('sequelize');
  2. let { dbName, host, port, user, password } = require('../config/config').database
  3. // Sequelize接收四个参数:
  4. // 参数1:dbName, 数据库名
  5. // 参数2:user, 数据库账户
  6. // 参数3:password, 密码
  7. // 参数4:{}, 这里面的配置项很多
  8. const sequelize = new Sequelize(dbName, user, password, {
  9. // 指定数据库的类型
  10. // sequelize是和具体的数据库无关的,这里可以使用其他的,比如mongodb,oracle等
  11. // 连接mysql,还要安装mysql的驱动:mysql2
  12. dialect: 'mysql',
  13. host,
  14. port,
  15. // 是否在控制台显示原始的sql操作,默认为true
  16. logging: true,
  17. // 设置时区,一定要设置成北京时区,否则自动生成的会和北京时间相差8小时
  18. timezone: '+08:00',
  19. // 非常强的配置项,在这里配置更加个性化的参数
  20. define: {
  21. timestamps: true,
  22. paranoid: true,
  23. createdAt: 'created_at',
  24. updatedAt: 'updated_at',
  25. deletedAt: 'deleted_at',
  26. underscored:true, // 转为下划线
  27. freezeTableName:true, // 冻结表名,保持Model和数据库表一致。默认为false。
  28. scopes:{
  29. bh:{
  30. attributes: {
  31. exclude:['updated_at','deleted_at','created_at']
  32. }
  33. }
  34. }
  35. }
  36. });
  37. sequelize.authenticate()
  38. .then(() => {
  39. console.log('Connection has been established successfully.')
  40. })
  41. .catch(err => {
  42. console.log('Unable to connect to the database', err)
  43. })
  44. // 必须执行这个方法,才会根据model去生成数据表
  45. // 只有Model对应的表不存在时,才会生效,进行同步
  46. // 若表已经存在,则不再发挥同步作用
  47. sequelize.sync()
  48. .then(() => {
  49. console.log('init db ok')
  50. })
  51. .catch(err => {
  52. console.log('init db error', err)
  53. })
  54. module.exports = sequelize;

src/model/User.js

定义模型

define() 方法的第一个参数为表名,对应的是 users 表。
如果不设置 timestamps,Sequlize 会自动为我们添加创建时间和更新时间,我一般选择关闭,手动添加灵活性高些。

定时任务

安装日志

pnpm i @koa/logger

src/index.js

启动服务

src/middlewares/