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

举报
搞前端的半夏 发表于 2022/03/31 22:12:19 2022/03/31
【摘要】 hello,各位小伙伴,我是半夏,一个搞前端的程序员。在上一个课程中,我们已经搭建好了开发所需要的环境,本节课程,我们主要是使用Sequlize连接操作数据库。在正式开始之前,我们现在介绍一下整个系统的架构在VUE组件中,通过axios往后端接口发送请求,后端收到请求之后通过orm区操作数据库。然后将数据返回给组件,组件进行渲染。 使用sequlize操作mysql数据库 介绍Sequeli...

hello,各位小伙伴,我是半夏,一个搞前端的程序员。

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

本节课程,我们主要是使用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

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。