egg.js项目中集成Sequelize
egg.js项目中集成Sequelize
本例子中,项目集成了 orm 框架 Sequelize,通过命令行的方式生成数据库。本例使用的的是mssql数据库,如要使用mysql数据自行到官方网站查询。
例子中使用的的包有:
egg-sequelize、tedious、sequelize-cli
初始化项目
通过 npm 初始化一个项目
$ mkdir api
$ cd api
$ npm init egg -- type=simple //或npm init egg --type=ts
$ npm i
安装配置 egg-sequelize
- 安装 egg-sequelize
npm i egg-sequelize tedious --save
-
在
config/plugin.js
中引入 egg-sequelize 插件exports.sequelize = { enable: true, package: 'egg-sequelize', };
-
在
config/config.default.js
中编写 sequelize 配置config.sequelize = { dialect: 'mssql', host: '数据库地址', port: 1433, database: '数据库名称', };
-
编写对应的模型,在app/model中添加user.js文件,对应的内容如下:
'use strict'; module.exports = (app) => { const { STRING, INTEGER } = app.Sequelize; const User = app.model.define('user', { id: { primaryKey: true, type: INTEGER, autoIncrement: true, }, username: { unique: true, allowNull: false, type: STRING, }, truename: { type: STRING, }, password: { allowNull: false, type: STRING, }, status: { allowNull: false, defaultValue: 1, type: INTEGER, }, createdBy: { type: INTEGER, }, updatedBy: { type: INTEGER, }, deletedBy: { type: INTEGER, }, }); return User; };
初始化数据库和 Migrations
-
安装 sequelize-cli
npm install --save-dev sequelize-cli
在 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'),
};
-
初始化 Migrations 配置文件和目录
npx sequelize init:config npx sequelize init:migrations
执行完后会生成 database/config.json
文件和 database/migrations
目录,我们修改一下 database/config.json
中的内容,将其改成我们项目中使用的数据库配置:
{
"development": {
"username": "数据库登录用户名",
"password": '数据库密码',
"database": "数据库名称",
"host": "数据库地址",
"dialect": "mssql"
},
"test": {
"username": "数据库登录用户名",
"password": '数据库密码',
"database": "数据库名称",
"host": "数据库地址",
"dialect": "mssql"
}
}
此时 sequelize-cli 和相关的配置也都初始化好了,我们可以开始编写项目的第一个 Migration 文件来创建我们的一个 users 表了。
执行完后会在 database/migrations
目录下生成一个 migration 文件(${timestamp}-init-users.js
),我们修改它来处理初始化 users
表:
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
username: {
unique: true,
allowNull: false,
type: Sequelize.STRING,
},
truename: {
type: Sequelize.STRING
},
password: {
allowNull: false,
type: Sequelize.STRING
},
status: {
allowNull: false,
defaultValue: 1,
type: Sequelize.INTEGER,
},
created_at: {
allowNull: false,
type: Sequelize.DATE
},
updated_at: {
allowNull: false,
type: Sequelize.DATE
},
deleted_at: {
type: Sequelize.DATE
},
created_by: {
type: Sequelize.INTEGER,
},
updated_by: {
type: Sequelize.INTEGER,
},
deleted_by: {
type: Sequelize.INTEGER,
},
});
},
down: async (queryInterface, Sequelize) => {
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
执行之后,我们的数据库初始化就完成了。