egg.js中使用sequelize Mysql2 记录1
安装CLI
$ npm install --save egg-sequelize mysql2
在config/plugin.js中引用egg-sequelize
export.sequelize = {
enable:true,
package:'egg-sequelize'
}
在config/config.default.js中编写sequelize配置
config.sequelize = {
dialect:'mysql',
host:'127.0.0.1',
port:'3306',
database:'egg_sequelize_doc_default'
}
初始化数据库和Migrations
- 初始化数据库
我们平时一个人练习的时候,大部分数据库初始化的时候采用的是sql语句创建,或是用一些图形界面工具。但是这并不是一个对多人协作非常友好的开发模式,在项目的演进过程中,每一个迭代都有可能对数据库数据结构做变更,怎样跟踪每一个迭代的数据变更,并在不同的环境(开发、测试、CI)和迭代切换中,快速变更数据结构呢?这时候我们就需要 Migrations 来帮我们管理数据结构的变更了。 - Migrations:
就像使用Git / SVN管理源代码中的更改一样,您可以使用迁移来跟踪对数据库的更改。通过迁移,您可以将现有数据库转移到另一个状态,反之亦然:这些状态转换保存在迁移文件中,这些文件描述了如何进入新状态以及如何恢复更改以恢复到旧状态。您将需要Sequelize CLI。CLI提供对迁移和项目引导的支持。
如何使用Migrations
- 安装sequelize-cli
sequelize 提供了 sequelize-cli 工具来实现Migrations,我们可以在egg项目中引入sequelize-cli
npm install --save-dev sequelize-cli
- 根目录创建.sequelizerc文件
这是一个特殊的配置文件,它允许您指定通常作为参数传递给CLI的各种选项,您可以使用它的一些场景。比如你不想使用默认的路径migrations,models,seeders或config文件夹。
const path = require('path');
module.exports = {
'config': path.resolve('config', 'database.json'),
'models-path': path.resolve('db', 'models'),
'seeders-path': path.resolve('db', 'seeders'),
'migrations-path': path.resolve('db', 'migrations')
}
/*
使用此配置,您将告诉CLI
使用config/database.json文件进行配置设置
使用db/models的模型文件夹
使用db/seeders如播种机文件夹
使用db/migrations作为迁移文件夹
*/
- 初始化Migrations配置文件和目录
npx sequelize init:config
npx sequelize init:migrations
执行完之后回生成database/config.json文件和database/migrations目录,我们修改一下database/config.json中的内容,将其改成我们项目中使用的数据库配置
{
"mark":"包含配置文件,告诉CLI如何连接数据库",
"development": {
"username": "root",
"password": "Cc1223..",
"database": "egg_sequelize_doc_default",
"host": "127.0.0.1",
"dialect": "mysql"
},
"test": {
"username": "root",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": null,
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
- 配置我们已经完成了,可以创建表了
创建第一个Migration文件npx sequelize migration:generate --name=init-users
执行完后会在 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');
},
};
- 创建表
# 升级数据库
npx sequelize db:migrate
# 如果有问题需要回滚,可以通过 `db:migrate:undo` 回退一个变更
# npx sequelize db:migrate:undo
# 可以通过 `db:migrate:undo:all` 回退到初始状态
# npx sequelize db:migrate:undo:all