起步
1. 初始化项目
mkdir egg-example && cd egg-example
npm init egg --type=simple
npm i
npm run dev
open <http://localhost:7001>
2. 添加ORM框架
https://eggjs.org/zh-cn/tutorials/sequelize.html
- 安装
egg-sequelize插件与mysql2
npm install egg-sequelize mysql2 -S2.
- 引用插件,
config/plugin.js
module.exports = {
sequelize: {
enable: true,
package: 'egg-sequelize',
},
};
- 编写sequelize配置,
config/config.default.js
module.exports = appInfo => {
// config等默认配置...
config.sequelize = {
dialect: 'mysql', // 数据库类型
host: '你的数据库地址',
port: 3306,
user: 'root',
password: 'pwd',
database: '需要连接的数据库名称',
};
return {
...config,
...userConfig,
};
};
- 初始化数据库和Migrations
- 方式1: 手动创建表结构
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'primary key',
`name` varchar(30) DEFAULT NULL COMMENT 'user name',
`age` int(11) DEFAULT NULL COMMENT 'user age',
`created_at` datetime DEFAULT NULL COMMENT 'created time',
`updated_at` datetime DEFAULT NULL COMMENT 'updated time',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='user';
- 方式2: 使用
sequelize-cli创建表结构
- 安装
sequelize-cli
npm install sequelize-cli -D
- 在项目根目录创建配置文件(
.sequelizerc), 用来放置数据库Migrations相关内容
'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'),
};
- 初始化 Migrations 配置文件和目录. 下面命令会自动生成
database/config.json和database/migrations
npx sequelize init:config
npx sequelize init:migrations
- 修改数据库连接配置
database/config.json - 创建表配置文件, 命令会在
database/migrations下生成${timestamp}-init-users.js文件
npx sequelize migration:generate --name=init-users
- 根据自身需求修改生成的表配置文件
${timestamp}-init-users.js
'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');
},
};
- 执行 migrate 进行数据库变更
# 升级数据库
npx sequelize db:migrate
# 如果有问题需要回滚,可以通过 `db:migrate:undo` 回退一个变更
# npx sequelize db:migrate:undo
# 可以通过 `db:migrate:undo:all` 回退到初始状态
# npx sequelize db:migrate:undo:all