标签搜索
隐藏侧边栏

【Vue3+Express实战-2】Sequelize连接Mysql

搞前端的半夏
2022-03-23 / 0 评论 / 0 点赞 / 771 阅读 / 2,730 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-04-15,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

大家好,我是半夏👴,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注➕ 点赞 👍 加我微信:frontendpicker,一起学习交流前端,成为更优秀的工程师~关注公众号:搞前端的半夏,了解更多前端知识!点我探索新世界!

扫码或搜索添加文末公众号「搞前端的半夏」:
🍗 硬核资料:领取1000+PPT模板、100+简历模板、行业经典书籍PDF。
🍗 回复 ”网站模板“,免费送网站模板!
🍗 回复 ”面试“:免费送你前端面试题库!
🍗 加我:frontendpicker, 更多精彩等你来!
🍗 回复[算法],获取各种算法资料!

在上一个课程中,我们已经搭建好了开发所需要的环境,

本节课程,我们主要是使用Sequlize连接操作数据库。

在正式开始之前,我们现在介绍一下整个系统的架构

在VUE组件中,通过axios往后端接口发送请求,后端收到请求之后通过orm区操作数据库。然后将数据返回给组件,组件进行渲染。

架构

使用sequlize操作mysql数据库

介绍

Sequelize 是一个基于 Promise 的 Node.js ORM,适用于 Postgres、MySQL、MariaDB、SQLite 和 Microsoft SQL Server

要连接到数据库,必须创建一个 Sequelize 实例. 这可以通过将连接参数分别传递到 Sequelize 构造函数或通过传递一个连接 URI 来完成,Sequelize 提供了三种连接数据库的方式!

配置mysql

在VScode中打开项目,然后再根目录下创建app文件夹,并在app文件夹下新建db.config.js文件,开始编写数据库的配置文件!我们单独将配置文件抽出来,可以有效的解耦,如果我们想配置多个数据库,那么只要编写一个通用的Sequlizes实例,就可以来连接多个数据库。

这里的DB: "testdb",需要提前在mysql种创建一个testdb数据库

module.exports = {
    HOST: "localhost",
    USER: "root",
    PASSWORD: "root",
    DB: "testdb",
    dialect: "mysql",
  };

连接mysql

上面我们已经写好了数据库的配置文件,下面我们就来编写一个通用的Sequlize实例!

在app文件夹下创建models文件,然后新建index.js。下面开始编写连接数据库的代码:

const dbConfig = require("../config/db.config.js");
const Sequelize = require("sequelize");
const sequelize = new Sequelize(dbConfig.DB, dbConfig.USER, dbConfig.PASSWORD, {
  host: dbConfig.HOST,
  dialect: dbConfig.dialect,
});
const db = {};
db.Sequelize = Sequelize;
db.sequelize = sequelize;
module.exports = db;

这里请注意:我们最后又创建了一个db 对象,定义这个db对象的原因是,我们可以将Sequelize类和sequelize都挂载到db上,进行一个统一的管理,同时还可以将下面要创建的模型都挂载到db上!

创建课程模型

我们已经可以正常的连接数据库了,那连接数据库之后,我们是不是需要在testdb创建表!之前我们可能是需要编写sql脚本或者使用可视化工具创建表,添加字段。不过Sequelizes可以通过定义模型,同步模型到数据库中,从而自动的在数据库中创建表以及字段。也就是说Sequelizes的模型对应数据库中的表!

在Sequelizes中有两种定义数据模型的方式。

这里我们使用define方式,defined是通过Sequlize实例来调用的。

我们定义了一个函数,这个函数接受sequelize,实例 Sequelize类两个参数,然后在函数内部通过调用实例上define函数来创建一个Tutorial实例。

module.exports = (sequelize, Sequelize) => {
  const Tutorial = sequelize.define("tutorial", {
    title: {
      type: Sequelize.STRING
    },
    description: {
      type: Sequelize.STRING
    },
    published: {
      type: Sequelize.BOOLEAN
    }
  });
  return Tutorial;
};

虽然我们只定义了title,description published 三个字段,但是Sequelize 将会自动这些列将自动生成:idcreatedAtupdatedAt

然后,我们在app/models/index.js,中调用这个函数。

......
db.Sequelize = Sequelize;
db.sequelize = sequelize
db.tutorials = require("./tutorial.model.js")(sequelize, Sequelize);
module.exports = db;

这里我们再来说一下,定义db对象的好处。

  1. 将Sequelize类, sequelize实例挂在db上,这样我们在其他文件中用到Sequelize类, sequelize实例,是只需要import db就可以,不需要引入两次
  2. 可以将模型都挂在到db。这里只是一个模型,如果100个模型,某个文件,我们可能会需要引入99个模型,那么就要写99个import,但是你都挂在到db上,就只需要写一次import。

同步模型

定义好模型之后,我们就可以同步模型!

在server.js中,我们引入并使用刚才创建的sqeuilze

const db = require("./app/models");
db.sequelize.sync().then(() => {
  console.log("创建数据库");
});

运行系统,自动创建数据表

执行下面的命令,后台启动,并且自动在testdb创建名为tutorials数据表!

node server.js

image-20220322211311587

至此我们已经成功连接到数据库!

0

评论区