はじめに
会員登録の画面イメージ
開発準備
Sequelize CLIを利用してユーザーのモデル作成
npx sequelize model:generate --name user --underscored --attributes user_name:string,mail_address:string,password:string,sex:string,birth_day:date,token:string,login_failure_count:integer
モデル作成時の注意点
- 下記のように指定したフィールドの間にスペースを入れるとエラーになります。
npx sequelize model:generate --name user --underscored --attributes user_name:string, mail_address:string, password:string,sex:string, birth_day:date, token:string, login_failure_count:integer
Sequelize CLI [Node: 12.16.2, CLI: 5.5.1, ORM: 5.21.7]
ERROR: Attribute '' cannot be parsed: Cannot read property 'dataType' of undefined
migrateファイルが作成される
- allowNullでNULLを許可しない、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,
allowNull: false,
},
mail_address: {
type: Sequelize.STRING,
allowNull: false,
},
password: {
type: Sequelize.STRING,
allowNull: false,
},
sex: {
type: Sequelize.STRING,
allowNull: false,
},
birth_day: {
type: Sequelize.DATE,
allowNull: false,
},
token: {
type: Sequelize.STRING,
allowNull: false,
},
login_failure_count: {
type: Sequelize.INTEGER,
allowNull: false,
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');
}
};
modelファイル
- 入力チェックやNULLは許可しない設定にしておきましょう。エラーメッセージの指定。
- サーバーサイド側も最低限の入力チェックを行う
'use strict';
module.exports = (sequelize, DataTypes) => {
const user = sequelize.define('user', {
user_name: {
type: DataTypes.STRING,
allowNull: false,
validate:{
notEmpty: {
msg: 'ユーザー名を入力してください'
}
}
},
mail_address: {
type: DataTypes.STRING,
allowNull: false,
validate:{
notEmpty: {
msg: 'メールアドレスを入力してください'
}
}
},
password: {
type: DataTypes.STRING,
allowNull: false,
validate:{
notEmpty: {
msg: 'パスワードを入力してください'
}
}
},
sex: {
type: DataTypes.STRING,
allowNull: false,
validate:{
notEmpty: {
msg: '性別を入力してください'
}
}
},
birth_day: {
type: DataTypes.DATE,
allowNull: false,
validate:{
notEmpty: {
msg: '誕生日を入力してください'
}
}
},
token: {
type: DataTypes.STRING,
allowNull: false,
validate:{
notEmpty: {
msg: 'トークンが生成されておりません'
}
}
},
login_failure_count:{
type: DataTypes.INTEGER,
allowNull: false,
}
}, {
underscored: true,
});
user.associate = function(models) {
// associations can be defined here
};
return user;
};
migrate実行
# npx sequelize-cli db:migrate
Sequelize CLI [Node: 12.16.2, CLI: 5.5.1, ORM: 5.21.7]
Loaded configuration file "config/config.json".
Using environment "development".
(node:450) [SEQUELIZE0004] DeprecationWarning: A boolean value was passed to options.operatorsAliases. This is a no-op with v5 and should be removed.
== 20200604153638-create-user: migrating =======
== 20200604153638-create-user: migrated (0.127s)
テーブル確認する
mysql> desc users;
+---------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| user_name | varchar(255) | NO | | NULL | |
| mail_address | varchar(255) | NO | | NULL | |
| password | varchar(255) | NO | | NULL | |
| sex | varchar(255) | NO | | NULL | |
| birth_day | datetime | NO | | NULL | |
| token | varchar(255) | NO | | NULL | |
| login_failure_count | int | NO | | NULL | |
| created_at | datetime | NO | | NULL | |
| updated_at | datetime | NO | | NULL | |
+---------------------+--------------+------+-----+---------+----------------+
10 rows in set (0.01 sec)