model处理业务逻辑,router里面不要写业务逻辑
    code first,优先建模,sequelize会把模型转为数据库表
    数据库的设计,有粗到细

    • model目录下的每个 *.js就是一个模型

    image.png

    this.ctx.model.${Modelname}调用的Modelname 必须与 ../model/{fileName}.js中fileName一致,
    且Modelname必须大写开头,而fileName则无规定大小写。
    例如this.ctx.model.Userinfo其对应的model路径为../model/userinfo.js,

    1. const router = new Router({
    2. prefix: '/v1/user',
    3. });
    4. // 中间件形式,是错误的用法,因为中间件只在 koa初始化的时候,执行一次
    5. 不要以 class类的形式组织中间件,必须是函数的方式
    6. router.get('/register', new RegisterValidator(), async() => {});
    7. router.get('/register', async() => {
    8. // 这种每次都会执行
    9. const validate = await new RegisterValidate()
    10. })
    11. module.exports = app => {
    12. const { STRING, INTEGER } = app.Sequelize;
    13. const User = app.model.define('user', {
    14. id: {
    15. type: INTEGER,
    16. autoIncrement: true,
    17. primaryKey: true
    18. },
    19. name: {
    20. type: STRING,
    21. allowNull: false
    22. },
    23. password: {
    24. type: STRING(32),
    25. allowNull: false
    26. }
    27. });
    28. // 表关联的字段
    29. User.associate = function() {
    30. // 一对多
    31. app.model.User.hasMany(app.model.Diary, { foreignKey: 'user_id', targetKey: 'id'})
    32. }
    33. return User;
    34. }