node/egg - sequelize 構建ORM
1. npm i egg-sequelize mysql2 sequelize-cli
啟動專案 npm run dev
2. 配置plugin.js啟動外掛
exports.sequelize = {
enable: true,
package: 'egg-sequelize',
};
配置config.default.js
config.sequelize = { dialect: 'mysql', database: 'baseName', host: 'localhost', port: '3306', username: 'root', password: 'root, }
3.配置 .sequelize(因為egg-sequlize的sequelize-cli有版本問題,所以自定義sequelize-cli)
const path = require('path'); module.exports = { 'config': path.resolve('config', 'config.json'), 'models-path': path.resolve('app', 'model'), 'seeders-path': path.resolve('app', 'seeder'), 'migrations-path': path.resolve('app', 'migration') }
初始化
$ node_modules/.bin/sequelize init
生成3個資料夾 1個json檔案
app/migration # 用來存放資料庫遷移資料夾,當需要修改表結構的時候,可以控制這些程式碼來控制資料庫表結構的版本回退
app/model # 用表中欄位如何對映到js物件上的邏輯
app/seeder # 用來存放如何生成假資料的資料夾
config/config.json # 資料庫配置
{ "development": { "username": "root", "password": "yourpass", "database": "database_development", "host": "127.0.0.1", "dialect": "mysql" }, "test": { "username": "root", "password": "yourpass", "database": "database_test", "host": "127.0.0.1", "dialect": "mysql" }, "production": { "username": "root", "password": "yourpass", "database": "database_production", "host": "127.0.0.1", "dialect": "mysql" } }
注意: 如果你的資料庫還不存在,你可以呼叫 db:create
命令。 通過正確的訪問,它將為您建立該資料庫。
4 建立user 的 Migration
$ node_modules/.bin/sequelize model:generate --name User --attributes firstName:string,lastName:string,email:string
這將發生以下事情
- 在
models
資料夾中建立了一個user
模型檔案 - 在
migrations
資料夾中建立了一個名字像XXXXXXXXXXXXXX-create-user.js
的遷移檔案
注意: Sequelize 將只使用模型檔案,它是表描述。另一邊,遷移檔案是該模型的更改,或更具體的是說 CLI 所使用的表。 處理遷移,如提交或日誌,以進行資料庫的某些更改。
遷移到資料庫
$ node_modules/.bin/sequelize db:migrate
撤銷遷移
恢復最近的遷移
$ node_modules/.bin/sequelize db:migrate:undo
通過使用 db:migrate:undo:all
命令撤消所有遷移,可以恢復到初始狀態。 您還可以通過將其名稱傳遞到 --to
選項中來恢復到特定的遷移
$ node_modules/.bin/sequelize db:migrate:undo:all --to XXXXXXXXXXXXXX-create-posts.js
5. 建立假資料
這個命令將會在 seeders
資料夾中建立一個種子檔案。檔名看起來像是 XXXXXXXXXXXXXX-demo-user.js
,它遵循相同的 up/down
語義,如遷移檔案。
node_modules/.bin/sequelize seed:generate --name demo-user
現在編輯這個檔案
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.bulkInsert('Users', [{
firstName: 'John',
lastName: 'Doe',
email: '[email protected]'
}], {});
},
down: (queryInterface, Sequelize) => {
return queryInterface.bulkDelete('Users', null, {});
}
};
插入資料庫
$ node_modules/.bin/sequelize db:seed:all
這將執行該種子檔案,您將有一個演示使用者插入 User
表。
注意: seeders
執行不會儲存在任何使用 SequelizeMeta
表的遷移的地方。 如果你想覆蓋這個,請閱讀 儲存
部分
撤銷
node_modules/.bin/sequelize db:seed:undo
撤銷全部
node_modules/.bin/sequelize db:seed:undo:all