Sequelize V6.20.1 MVC模式(一 | 简单的MVC构建)

87 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

大家可以前往 Sequelize中文文档,查看 Sequelize不同版本【5.x、4.x】的文档

本文档分多个篇章,难易程度从低到高,学习此篇章之前,务必确保自己已经掌握 node.jsexpress、es6语法、mysql等关系型数据库的sql语法等

在开始学习之前,先让我们了解一下为什么选择这款框架吧

  1. 大家可以前往 github.com/search?q=Se… 查看start数
  2. Sequelizejs是一个ORM(Object Relationship Model)框架,我们可以用面向对象的思维来操作MySQL
  3. 此框架我们选择了最新的版本Sequelize V6.20.1 ,由于每个版本都会进行升级,这里只介绍V6.x的版本,下面让我们正式开始吧

安装

安装Sequelize
$ npm install --save sequelize
安装对应的数据库驱动程序
$ npm install --save mysql2

目录结构

目录结构

下面会对应各个文件的功能

链接数据库(connection/index.js

注意:在链接数据库时,因为我的数据库版本是 MySQL8.0 ,当时链接出错了,修改一下配置就好了,解决此问题的文档自行百度

这里我直接暴露出去Sequelize实例化并成功链接后的对象

import { Sequelize }  from 'sequelize'
const sequelize = new Sequelize({
    dialect: 'mysql', // 指定连接的数据库类型
    database: 'shuati', // 指定连接的数据库
    username: 'root', // 数据库用户名
    password: '123456', // 数据库密码
    host: 'localhost', // 指定数据库服务器的ip
    port: 3306 // 指定数据库服务器的端口号
});

sequelize.authenticate().then(() => {
    console.log('mysql connection success.');
}).catch(err => {
    console.error('mysql connection error:', err);
});

定义user表模型--Model(Model/User.Model.js

查看更多数据类型,请点击此处

查看更多模型定义,请点击此处

import {Sequelize, DataTypes} from "sequelize";
import sequelize from "../connection";

let User = sequelize.define('user', { //这里的user会默认转成复数users
        username: {
            type: DataTypes.CHAR(10), //字段类型
            allowNull: false,//不为空
            unique: true //字段是否UNIQUE
        },
        gender: DataTypes.INTEGER //如果只有类型,可以直接这么设置
    },{
        tableName: '自定义表名',
        timestamps: true,// 是否需要增加createdAt、updatedAt字段
        createdAt: false, // 不需要createdAt字段
        updatedAt: 'endtime',//修改updatedAt字段名称为endtime
        freezeTableName: true,// 禁用修改表名; 默认情况下,sequelize将自动将所有传递的模型名称(define的第一个参数)转换为复数. 如果你不想这样,请设置为true
    }
);

User.sync({force: true}).then(d=> { //建议在表模型设计完成后,打开此段代码,待数据库中表建立完成后,注释掉此段,防止每次都删除并重新建表
    console.log('强制清空users表并根据模型新建');
});
export default User

操作user模型--Controller(Controller/User.Controller.js

import User from './../Model/User.Model'

export default {
    getUserInfo: (req, res, next)=>{//这里举个例子,直接获取username为Mjhu的用户
        User.findOne({where: {username: 'Mjhu', gender: 1}}).then(user => {
            res.send({code: 200, data: user})
        }).catch(err=>{
            res.send({code: 500,data: err})
        });
    }
}

View模型

const express = require('express');
const router = express.Router();
import User from '../Mysql/Controller/User.Controller'

router.get('/mysql', User.getUserInfo); //直接调用Controller里的方法

module.exports = router;

到此为止,一个简单的 Sequelize MVC 就弄好了