必要なpackageをインストール
npm install mysql2
npm install --save-dev sequelize-cli
sequelizeの初期化
npx sequelize init
下記の2つのファイルが作成される
{
"development": {
"username": "root",
"password": null,
"database": "database_development",
"host": "127.0.0.1",
"dialect": "mysql",
"operatorsAliases": false
},
"test": {
"username": "root",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql",
"operatorsAliases": false
},
"production": {
"username": "root",
"password": null,
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql",
"operatorsAliases": false
}
}
models/index.js
ファイルは基本的にはいじらないです。
作成したいテーブル
列 |
型 |
コメント |
id |
int 連番 |
|
user_name |
varchar(255) |
ユーザー名 |
mail_address |
varchar(255) |
メールアドレス |
password |
varchar(255) |
パスワード |
token |
varchar(255) |
トークン |
login_failure_count |
int |
ログイン連続失敗回数 |
created_at |
datetime |
登録日 |
updated_at |
datetime |
更新日 |
Modelの作成
- 上記のテーブルを作成する際に下記のコマンドを実行するとマイグレーションファイルとモデルのファイルが作成される。
--underscored
のオプションをつけると登録日と更新日のフィールド名がcreated_at
になり、オプションをつけないとcreatedAt
になりますので、おこのみでつけてください。
npx sequelize model:generate --name user --underscored --attributes user_name:string,mail_address:string,password:string,token:string,login_failure_count:integer
migrations/20200505090006-create-user.js
というファイルができますので、created_at
とupdated_at
にdefault値でSequelize.NOW
を指定してください。指定しないとデータ登録時に自動で
登録日と更新日が反映されません。
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
user_name: {
type: Sequelize.STRING
},
mail_address: {
type: Sequelize.STRING
},
password: {
type: Sequelize.STRING
},
token: {
type: Sequelize.STRING
},
login_failure_count: {
type: Sequelize.INTEGER,
default: 0
},
created_at: {
allowNull: false,
type: Sequelize.DATE,
default: Sequelize.NOW
},
updated_at: {
allowNull: false,
type: Sequelize.DATE,
default: Sequelize.NOW
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('users');
}
};
テーブルの作成
- 下記のコマンドを実行すると先ほど
config/config.json
で指定したDBに対してテーブルを作成します。
npx sequelize-cli db:migrate
- データベースを確認すると下記のようにテーブルが作成されていることを確認できます。
mysql> desc users;
+---------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| user_name | varchar(255) | YES | | NULL | |
| mail_address | varchar(255) | YES | | NULL | |
| password | varchar(255) | YES | | NULL | |
| token | varchar(255) | YES | | NULL | |
| login_failure_count | int | YES | | NULL | |
| created_at | datetime | NO | | NULL | |
| updated_at | datetime | NO | | NULL | |
+---------------------+--------------+------+-----+---------+----------------+
8 rows in set (0.00 sec)
migrate テーブル全部削除
npx sequelize-cli db:migrate:undo:all
seedデータ用ファイル作成
npx sequelize-cli seed:generate --name test-users
- seedデータの作成するときのサンプルです。下記のように記述するとテストデータをDBに登録することが可能です。※上記のテーブルの例とことなりますが、イメージをつかんで頂ければと思います。
'use strict';
const crypto = require('../lib/crypto');
module.exports = {
up: (queryInterface, Sequelize) => {
const now = new Date();
return queryInterface.bulkInsert('Users', [
{ firstName: 'hogehoge', lastName: 'hogehoge', age: 42, mailAddress: 'hogehoge', tel: 'hogehoge', password: crypto.sha256('password'), createdAt: now, updatedAt: now },
{ firstName: 'hogehoge', lastName: '山田', age: 31, mailAddress: 'hogehoge', tel: 'hogehoge', password: crypto.sha256('password1'), createdAt: now, updatedAt: now },
{ firstName: 'hogehoge', lastName: 'hogehoge', age: 20, mailAddress: 'hogehoge',tel: 'hogehoge', password: crypto.sha256('password2'), createdAt: now, updatedAt: now},
], {});
},
down: (queryInterface, Sequelize) => {
return queryInterface.bulkDelete('Users', null, {});
}
};
seedデータ作成
npx sequelize-cli db:seed:all