
sequelize 설정을 끝내고 테이블을 생성하려는데 오류가 떴다.
sequelize throw new Error(`${source.name}.${_.lowerFirst(Type.name)} called with something that's not a subclass of Sequelize.Model`); ^Error: Image.belongsTo called with something that's not a subclass of Sequelize.Model
이번 오류는 삽질을 많이했는데 이유가
Error: Image.belongsTo called with something that's not a subclass of Sequelize.Model
at Image.<anonymous> (C:\Users\INA\Documents\workspace\react-nodebird\prepare\back\node_modules\sequelize\lib\associations\mixin.js:63:13) 이렇게 에러 스택위치가 Image.belongsTo로 되어있어서였다.
처음엔 Image관련된 부분 오타를 전부 찾아봤다. app.js부분에 Image모델을 부르는 부분을 확인하고, model등록부분에 오타가 있는지 보고, associate도 하나하나 다 찾아봤는데 제대로 설정이 되어있었다..
문제해결
Post.associate = (db) => {
db.Post.belongsTo(db.User);
db.Post.belongsToMany(db.Hashtag, { through: 'PostHashtag' });
db.Post.hasMany(db.Comment);
db.Post.hasMany(db.Image);
db.Post.belongsToMany(db.User, { throuth: 'Like', as: 'Likers' }); // 여기!
db.Post.belongsTo(db.Post, { as: 'Retweet' });
};
진짜 억울하게도 위에보면 문제가 있던부분은 Image랑 연결하는 부분이 아닌 그 밑에 다대다 연결하는 User부분의 through가 오타가 생겼던 것이다.
Post.associate = (db) => {
db.Post.belongsTo(db.User);
db.Post.belongsToMany(db.Hashtag, { through: 'PostHashtag' });
db.Post.hasMany(db.Comment);
db.Post.hasMany(db.Image);
db.Post.belongsToMany(db.User, { through: 'Like', as: 'Likers' });
db.Post.belongsTo(db.Post, { as: 'Retweet' });
};
오타를 수정해주고 다시 서버를 실행해주니
테이블이 잘 생성되었다.
그리고 workbench에서도 잘 들어온걸 확인할 수 있었다.
모델 subclass오류도 읽고.. 마지막으로 끝나는 스택부분의 주변도 잘 살펴봐야겠다..