05 egg.js之数据库迁移

一、软件下载安装

可使用upupw ank软件,作为服务器,用于数据库存储,下载网址

05 egg.js之数据库迁移

选择对应的版本下载

二、项目配置

使用sequelize框架来访问数据库,教程可见egg-js官网

1、初始化项目

 mkdir sequelize-project && cd sequelize-project
 npm init egg --type=simple
 npm i

2、安装并配置 egg-sequelize 插件和 mysql2 模块

npm install --save egg-sequelize mysql2

3、在config/plugin.js中引入egg-sequelize插件

exports.sequelize = {
  enable: true,
  package: 'egg-sequelize',
};

4、在 config/config.default.js 中编写 sequelize 配置(参数设置为自己的)

config.sequelize = {
  dialect: 'mysql',
  host: '127.0.0.1',
  username: 'root',
  password: 'root',
  port: 3306,
  database: 'egg-db',
  timezone: '+08:00',
  define: {
     //取消数据表名复数
     freezeTableName: true,
     //自动写入时间戳created_at updated_at
     timestamps: true,
     //字段生成软删除时间戳 deleted_at
     paranoid: true,
     createdAt: 'created_at',
     updatedAt: 'updated_at',
     deletedAt: 'deleted_at',
     //所有驼峰命名格式化
     underscored: true
  }
};

5、sequelize提供了sequelize-cli工具来实现Migrations,我们也可以在egg项目中sequelize-cli

npm install --save-dev sequelize-cli

6、egg项目中,我们希望将所有的数据库migrations相关的内容都放在database目录下,所以我们在项目根目录下新建一个.sequelizerc配置文件:

'use strict';

const path = require('path');

module.exports = {
  config: path.join(__dirname, 'database/config.json'),
  'migrations-path': path.join(__dirname, 'database/migrations'),
  'seeders-path': path.join(__dirname, 'database/seeders'),
  'models-path': path.join(__dirname, 'app/model'),
};

7、初始化Migrations配置文件和目录

npx sequelize init:config
npx sequelize init:migrations

8、执行完后会生成 database/config.json 文件和 database/migrations 目录,我们修改一下 database/config.json 中的内容,将其改成我们项目中使用的数据库配置:

{
  "development": {
    "username": "root",
    "password": "root",
    "database": "egg-db",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "test": {
    "username": "root",
    "password": null,
    "database": "egg-sequelize-doc-unittest",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}

 

3、创建数据库和表

1、创建数据库

npx sequelize db:create

2、此时 sequelize-cli 和相关的配置也都初始化好了,我们可以开始编写项目的第一个 Migration 文件来创建我们的一个 users 表了。

npx sequelize migration:generate --name=init-users

3、执行完后会在 database/migrations 目录下生成一个 migration 文件(${timestamp}-init-users.js),我们修改它来处理初始化 users 表:

'use strict';

module.exports = {
  // 在执行数据库升级时调用的函数,创建 users 表
  up: async (queryInterface, Sequelize) => {
    const { INTEGER, DATE, STRING } = Sequelize;
    await queryInterface.createTable('users', {
      id: { type: INTEGER, primaryKey: true, autoIncrement: true },
      name: STRING(30),
      age: INTEGER,
      created_at: DATE,
      updated_at: DATE,
    });
  },
  // 在执行数据库降级时调用的函数,删除 users 表
  down: async queryInterface => {
    await queryInterface.dropTable('users');
  },
};

4、执行 migrate 进行数据库变更

# 升级数据库
npx sequelize db:migrate
# 如果有问题需要回滚,可以通过 `db:migrate:undo` 回退一个变更
# npx sequelize db:migrate:undo
# 可以通过 `db:migrate:undo:all` 回退到初始状态
# npx sequelize db:migrate:undo:all

5、效果:成功生成users表

05 egg.js之数据库迁移

 

 

上一篇:sequelize Op 相关操作合集【转】


下一篇:node-sequelize学习笔记四(模型查询)