지금 존재하는 models 폴더 안의 user.js 파일은 mongoose로 구현한 모델.
sequelize로 다시 만들겁니다!
npx sequelize model:generate --name User --attributes email:string,nickname:string,password:string
models 폴더에 user.js가 생기고, migrations 폴더에 숫자-create-user.js 같은 이름으로 파일이 하나 생겼을거예요. (숫자는 생성한 시간마다 달라요)
models/user.js
의 역할:모델에서는 id가 없었는데 migration 파일에는 존재함. 왜?
이 차이는 Sequelize가 "id"라는 키를 모델 데이터의 ID로 사용하도록 기본 설정 해두었기 때문에 모델에 따로 표현하지 않아도 잘 동작했던것입니다!
여기서 포인트는 ID는 있어도 되고 없어도 되는것이 아니라, 모델에 id가 없다면 Sequelize가 기본적으로 "id"가 테이블에 존재한다고 가정하고 id가 있는것처럼 동작합니다.
그렇기 때문에 테이블에 id가 존재하지 않으면 안된다는 뜻과도 같고, 테이블을 생성하는 코드인 이 파일에서 id가 존재했던것입니다.
Sequelize는 데이터의 고유 ID를 기본적으로 "
id
" 로 저장하도록 하는데, 저희가 준비한 프론트엔드 코드는 이 고유 ID의 이름이 "id
"가 아닌 "userId
"여야 제대로 동작하도록 짜여 있답니다!그렇기 때문에
id
대신userId
라는 이름으로 ID를 다루도록 수정해야 함.
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class User extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here
}
};
User.init({
userId: {
primaryKey: true,
type: DataTypes.INTEGER,
},
email: DataTypes.STRING,
nickname: DataTypes.STRING,
password: DataTypes.STRING
}, {
sequelize,
modelName: 'User',
});
return User;
};
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('Users', {
userId: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
email: {
type: Sequelize.STRING
},
nickname: {
type: Sequelize.STRING
},
password: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('Users');
}
};
npx sequelize db:migrate
다음과 같은 메시지가 뜨면 잘 생성된 것!
Sequelize CLI [Node: 16.14.0, CLI: 6.4.1, ORM: 6.21.2]
Loaded configuration file "config/config.json".
Using environment "development".
== 20220705113054-create-user: migrating =======
== 20220705113054-create-user: migrated (0.077s)