작성
·
343
·
수정됨
0
영상에서는 sequelize 공식문서에서 바뀌어서 따라갔다고 하는데 공식문서에서 initiate() 쓰는 것 검색하였을 때 안보이며 static이랑 같이 쓴 것도 아직은 못찾았습니다
공식문서 따라가보면 주로 define(), init()을 쓰는데 강의영상의 방식과는 차이점이 있습니다.
define()
const { Sequelize, DataTypes } = require('sequelize');
const sequelize = new Sequelize('sqlite::memory:');
const User = sequelize.define('User', {
// Model attributes are defined here
firstName: {
type: DataTypes.STRING,
allowNull: false
},
lastName: {
type: DataTypes.STRING
// allowNull defaults to true
}
}, {
// Other model options go here
});
// `sequelize.define` also returns the model
console.log(User === sequelize.models.User); // true
init()
// Invalid
class User extends Model {
id; // this field will shadow sequelize's getter & setter. It should be removed.
otherPublicField; // this field does not shadow anything. It is fine.
}
User.init({
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
}
}, { sequelize });
const user = new User({ id: 1 });
user.id; // undefined
강의에서 알려주는 방식으로 DB연결도 되고 조작도 잘되지만
이렇게 질문을 남긴 이유는
강의에서는 공식문서를 따라갔다고 하는데 공식문서에서는 찾기 어렵다는 점과
강의에 나오는 방식이 시기가 지난 방법이 아닐까 하는 생각에 질문 남기게 되었습니다
제가 찾아본게 잘못된걸수도 있기에 그런점 있다면 알려주세요
글읽어주셔서 고맙습니다:)
답변 2
0
네 맞습니다. initiate함수는 sequelize에서 제공하는 메소드가 아닙니다. initiate 라는 이름 대신 다른 이름을 사용해도 됩니다. 제로초님은 static 메소드를 활용함으로써, User의 인스턴스 없이 User.initiate() 이런 식으로 바로 사용하는 방식을 선택하신 것 같습니다. 나중에 메소드 호출할 때를 생각해보면 제로초님의 방식이 깔끔한 것 같네요!
0
질문이 잘 이해가 안 되는데요. 저도 init을 강의에서 쓰고 있습니다.(User.init)
그리고 class 문법은 자유자재로 활용해도 됩니다. User.init을 static initiate라는 함수 안에서 호출할 뿐입니다.
아하 initiate는 sequelize에 있는 키워드가 아니라 "class 문법은 자유자재로 활용" 인가보군요