全局安装
npm install --save egg-sequelize mysql2 -g
引入插件 (config/plugin.js)
exports.sequelize = {
enable: true,
package: 'egg-sequelize',
};
编写 sequelize 配置 (config/config.default.js)
config.sequelize = {
dialect: 'mysql',
host: '127.0.0.1',
port: 3306,
database: 'egg-sequelize',
dialectOptions: { // 时间格式化
dateStrings: true,
typeCast: true
},
define: {
timestamps: false // don't add the timestamp attributes (updatedAt, createdAt)
},
timezone: '+08:00' // 保存为本地时区,mysql保存时会自动保存为UTC格式
// delegate: 'myModel', // load all models to `app[delegate]` and `ctx[delegate]`, default to `model`
// baseDir: 'my_model', // load all files in `app/${baseDir}` as models, default to `model`
};
初始化数据库和Migrations(管理数据结构)
安装sequelize-cli, 使用sequelize-cli实现migrations
npm install --save-dev sequelize-cli
把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'),
};
初始化 Migrations 配置文件和目录
npx sequelize init:config
npx sequelize init:migrations
执行完后会生成 database/config.json 文件和 database/migrations 目录,我们修改一下 database/config.json 中的内容,将其改成我们项目中使用的数据库配置:
{
"development": {
"username": "root",
"password": null,
"database": "egg-sequelize-doc-default",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
此时 sequelize-cli 和相关的配置也都初始化好了,我们可以开始编写项目的第一个 Migration 文件来创建我们的一个 users 表了。
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');
},
};
执行 migrate 进行数据库变更
npx sequelize db:migrate
执行之后,我们的数据库初始化就完成了。
快速创建数据库表模型
利用 egg-sequelize-auto 可以快速生成表模型
全局安装 egg-sequelize-auto 与 mysql2
npm install -g egg-sequelize-auto
npm install -g mysql2
进入项目下,生成表结构
egg-sequelize-auto -o "./app/model" -d databaseName -h localhost -u username -p port -x password -t tableName
一次性生成所有表结构
egg-sequelize-auto -o "./model" -d digapisids -h 192.168.0.205 -u root -x MVKafZN39QnjUmf# -p 13306 -e mysql
使用
await this.ctx.model.models.User.findAll()
最后将这个 controller 挂载到路由上
// app/router.js
module.exports = app => {
const { router, controller } = app;
router.get('/api/users', controller.users.users);
};
参考网站:
eggjs.org/zh-cn/tutor… sequelize.org/v5/manual/g… github.com/eggjs/egg-s…