数据库的连接处理,我们需要使用sequelize插件。这个插件还有对应的数据库驱动,如果是使用mysql,那么驱动是mysql2,具体可以查看中文版的入门教程:入门

yarn add sequelize mysql2 --dev

安装完成后我们先需要创建数据库连接。

连接数据库

根目录/core目录**下创建一个db.js文件用于连接数据库。

在连接数据库之前,我们需要一些数据库的参数,如账号,密码,端口,数据库名字,数据库地址,为了方便管理配置,我们在根目录创建一个config目录,里面存放一config.js文件 ,这个之前的教程我们就已经创建好了。

config.js:

module.exports = {
    //dev、prod
    env: "dev",
    //数据库配置
    database: {
        dbName: "koa-test", //数据库名
        host: "localhost", //数据库地址
        port: 3306, //数据库端口
        user: "root", //数据库用户名
        password: "123456", //数据库密码
    }
};

这样数据库的变动到时候只需要修改config里面的配置信息即可。

然后我们打开db.js,开始连接数据库

db.js:

const Sequelize = require("sequelize");
const {
    dbName,
    host,
    port,
    user,
    password
} = require(`${process.cwd()}/config/config`).database;

const sequelize = new Sequelize(dbName, user, password, {
    dialect: "mysql", //声明数据库类型
    host,
    port,
    logging: true, //开启每次使用控制台提示sql语法
    timezone: "+08:00", //设置时区
});

sequelize.sync();

module.exports = {
    sequelize
}

其中除了config中的数据库参数,我们还需要使用dialect声明数据库类型。

logging表示是否在控制台显示sql语法,用于每次改变数据库时所用到的sql语句,一般开发的时候使用,值为布尔值,默认是true,也就是开启。

由于Sequelize在操作数据库的时候,会生成时间戳,所以我们需要指定他的时区。

sequelize.sync();则表示模型同步,用于后面创建模型后,将模型的配置同步到数据上。他还有一些参数,后续再说。

最后我们导出这个new出来的Sequelize实力。后续在模型中我们需要用到这个实例,不然模型不知道修改那个数据库。

创建模型

已创建用户的数据表来说,他需要一下参数:

  1. id
  2. email
  3. password
  4. openid

id为数据库的id序号,自增的,email作为用户账号使用,密码就不多少了,openid作为微信常用的一个字段,这里也演示一些,但是后续才会填充内容。

微信的openid表示的是当前这个小程序的微信用户唯一的id值,但是两个小程序,同一个用户openid是不一样的,所以微信还有一个全局唯一id,具体自行百度。

知道我们需要的字段后,我们就需要创建了

根目录创建一个models目录,里面创建一个user.js文件。

user.js:

const { sequelize } = require(`${process.cwd()}/core/db`);
const { Sequelize, Model, DataTypes } = require("sequelize");


class User extends Model {

};

User.init({
  id: {
    type: DataTypes.INTEGER,
    primaryKey: true, //主键
    autoIncrement: true, //自增
  },
  nickname: DataTypes.STRING,
  email: {
    type: DataTypes.STRING(128),
    unique: true, //唯一
  },
  password:  DataTypes.STRING,
  openid: {
    type: DataTypes.STRING(64),
    unique: true, //唯一
  },
}, {
  sequelize,
  tableName: "user", //指定生成的表名
});


module.exports = {
  User
}

继承Model,创建一个自己的模型对象,使用init方法进行扩展,他接受两个参数,第一个参数我们需要创建的字段数据,第二个是一些配置参数,其中有一个sequelize参数用于关联对应的数据库,这里我们就将之前导出的sequelize实例用在此处。

模型默认创建的数据库表名为你创建的模型名字,也就是上面的User,如果我们要指定的话,可以使用tableName属性,填写一个自定的表名。

最后我们再将自定义的模型对象导出,后续数据的控制,都是通过该模型来进行操作。

模型其他内容

在连接数据库的时候,我们有一句sequelize.sync();语法,用于同步模型,我们来了解下他的意思。

  • User.sync() - 如果表不存在,则创建该表(如果已经存在,则不执行任何操作)
  • User.sync({ force: true }) - 将创建表,如果表已经存在,则将其首先删除
  • User.sync({ alter: true }) - 这将检查数据库中表的当前状态(它具有哪些列,它们的数据类型等),然后在表中进行必要的更改以使其与模型匹配.

我们在开发阶段,可以将force: true开启,这样方便我们增减字段,当然,他很危险,因为他会删除整个表重新创建,所以,如果已经有数据了,可以关闭,或者使用alter

db.js:

const Sequelize = require("sequelize");
const {
    dbName,
    host,
    port,
    user,
    password
} = require(`${process.cwd()}/config/config`).database;

const sequelize = new Sequelize(dbName, user, password, {
    dialect: "mysql", //声明数据库类型
    host,
    port,
    logging: true, //开启每次使用控制台提示sql语法
    timezone: "+08:00", //设置时区
});

sequelize.sync({
  force: true
});

module.exports = {
    sequelize
}

模型默认会给我们增减两个字段,一个是createdAt,另一个是updatedAt用于表示创建时间和更新时间,当我们通过模型去修改数据的时候,会自动更新这两个字段的值。

在数据库中,字段的命名不建议使用驼峰命名,一般是建议使用下划线,Sequelize 也提供了对应的设置方法,并且我们还可以增加一个字段deleted_at,用于表示软删除的时间。

使用方法也是在连接数据库的时候,做的配置

db.js:

const Sequelize = require("sequelize");
const { dbName, host, port, user, password } = require(`${process.cwd()}/config/config`).database;

const sequelize = new Sequelize(dbName, user, password, {
  dialect: "mysql", //声明数据库类型
  host,
  port,
  logging: true, //开启每次使用控制台提示sql语法
  timezone: "+08:00", //设置时区
  define: {
    timestamps: true, //是否自动创建时间戳
    paranoid: true, //是否开启删除时间戳字段,默认false
    // createdAt: "created_at",
    // updatedAt: "updated_at",
    // deletedAt: "deleted_at",
    underscored: true, //所有驼峰写法改为下划线写法
  }
});


sequelize.sync({
  force: true, //每次都重建数据表
});

module.exports = {
  sequelize
}

在define中,createdAt、updatedAt、deletedAt是用于改写字段名的,但是我们并不需要大的修改,只是将驼峰改为下划线,所以可以直接使用underscored: true表示所以的驼峰改为下划线。

然后timestamps: true表示是否自动创建时间戳,默认为true,如果改为false,那么createdAt、updatedAt、将不会被创建。

paranoid: true用于表示是否创建deletedAt字段,默认是false。

这样我们的一个数据模型是创建好了。

此时我们并没有使用到这个模型,所以测试有没有效果,我们可以在app.js文件中直接require("./models/user");然后查看数据库是否已经创建的user表。

至此,我们一个简单的注册用户模型创建完毕。

分类: Node 标签: nodekoasequelize数据库模型

评论

暂无评论数据

暂无评论数据

目录