profile image

L o a d i n g . . .

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오류도 읽고.. 마지막으로 끝나는 스택부분의 주변도 잘 살펴봐야겠다..

반응형
복사했습니다!