시퀄라이즈 모델명 질문
225
작성한 질문수 9
기존의 hashtag모델을 Comment모델로 바꾸는 시도를 했는데요,
Object.assign(options, _.omit(source.options, ['hooks']));
^
TypeError: Cannot assign to read only property 'name' of function 'class Comment extends Sequelize.Model {
static init(sequelize) {
return super.init(
{
c...<omitted>...
}'
at Function.assign (<anonymous>)
at Function.hasMany (C:\Users\DAAE\OneDrive - Chonnam National University\2021-1\Project\collusic\implement\collusic\backend\node_modules\sequelize\lib\associations\mixin.js:27:12)
at Function.associate (C:\Users\DAAE\OneDrive - Chonnam National University\2021-1\Project\collusic\implement\collusic\backend\models\user.js:49:13)
at Object.<anonymous> (C:\Users\DAAE\OneDrive - Chonnam National University\2021-1\Project\collusic\implement\collusic\backend\models\index.js:25:6)
이러한 에러가 나옵니다. post와 user 테이블도 바꿨었는데 hashtag모델을 바꾸니 문제가 생기네요..
기존의 databases는 mysql에서 drop 한 상태에서 실습중입니다!
//models/user.js
const Sequelize = require("sequelize");
//db 테이블과 sequelize 연동을 위한 코드
module.exports = class User extends Sequelize.Model {
static init(sequelize) {
return super.init(
{
email: {
type: Sequelize.STRING(40),
allowNull: true,
unique: true,
},
nick: {
type: Sequelize.STRING(15),
allowNull: false,
},
password: {
type: Sequelize.STRING(100),
allowNull: true,
},
provider: {
//로그인 제공자
type: Sequelize.STRING(10),
allowNull: false,
defaultValue: "local",
},
introduce: {
type: Sequelize.TEXT,
allowNull: true,
},
imagePath: {
type: Sequelize.STRING(100),
allowNull: true,
},
},
{
sequelize,
timestamps: true, //생성일 수정일 삭제일이 기록
underscored: false,
modelName: "User",
tableName: "users",
paranoid: true,
charset: "utf8",
collate: "utf8_general_ci", //한글 지원
}
);
}
static associate(db) {
db.User.hasMany(db.Post, db.Comment, {
foreignKey: "uid",
targetKey: "id",
});
}
};
//models/post.js
const Sequelize = require("sequelize");
module.exports = class Post extends Sequelize.Model {
static init(sequelize) {
return super.init(
{
title: {
//id 생략. -> sequlize에서는 id가 생략될 수 있음.
type: Sequelize.STRING(140),
allowNull: false,
},
description: {
type: Sequelize.TEXT,
allowNull: true,
},
audioFile: {
type: Sequelize.STRING(140),
allowNull: false,
},
state: {
type: Sequelize.BOOLEAN,
allowNull: false,
},
field_free: {
type: Sequelize.BOOLEAN,
allowNull: false,
},
lyrics_text: {
type: Sequelize.TEXT,
allowNull: true,
},
genre: {
type: Sequelize.STRING(140),
allowNull: true,
},
mood: {
type: Sequelize.STRING(140),
allowNull: true,
},
music_field: {
type: Sequelize.BOOLEAN,
allowNull: true,
},
lyrics_field: {
type: Sequelize.BOOLEAN,
allowNull: true,
},
instrument_field: {
type: Sequelize.BOOLEAN,
allowNull: true,
},
},
{
sequelize,
timestamps: true,
underscored: false,
modelName: "Post",
tableName: "posts",
paranoid: false, //deleted at false -> 게시글 삭제시 완전 삭제
charset: "utf8mb4", //이모티콘
collate: "utf8mb4_general_ci",
}
);
}
static associate(db) {
db.Post.belongsTo(db.User, { foreignKey: "uid", sourceKey: "id" });
db.Post.hasMany(db.Comment, { foreignKey: "pid", targetKey: "id" });
}
};
//models/comment.js
const Sequelize = require("sequelize");
module.exports = class Comment extends Sequelize.Model {
static init(sequelize) {
return super.init(
{
c_description: {
type: Sequelize.TEXT,
allowNull: false,
},
c_audioFile: {
type: Sequelize.STRING(140),
allowNull: false,
},
c_lyrics_text: {
type: Sequelize.TEXT,
allowNull: true,
},
selected_status: {
type: Sequelize.BOOLEAN,
allowNull: false,
},
},
{
sequelize,
timestamps: true,
underscored: false,
modelName: "Comment",
tableName: "comment",
paranoid: false,
charset: "utf8mb4",
collate: "utf8mb4_general_ci",
}
);
}
static associate(db) {
db.Comment.belongsTo(db.Post, { foreignKey: "pid", sourceKey: "id" });
db.Comment.belongsTo(db.User, { foreignKey: "uid", sourceKey: "id" });
}
};
//requestid 외래키
//uid 외래키
//models/index.js
const Sequelize = require("sequelize");
const env = process.env.NODE_ENV || "development"; //config.json의 development 가져오기
const config = require("../config/config")[env]; //config.json의 development 가져오기
const User = require("./user");
const Post = require("./post");
const Comment = require("./comment");
const db = {};
const sequelize = new Sequelize(
config.database,
config.username,
config.password,
config
);
db.sequelize = sequelize;
db.User = User;
db.Post = Post;
db.Comment = Comment;
//사람과 게시글은 1:1관계, 게시글과 해시태그는 1:N 관계
User.init(sequelize);
Post.init(sequelize);
Comment.init(sequelize);
User.associate(db);
Post.associate(db);
Comment.associate(db);
module.exports = db;
답변 1
리눅스 노드 설치시 패키지
0
162
0
socket.js 에서 referer로부터 roomId를 가져올 때
0
908
3
스트리밍 방식으로 대용량 파일 업로드 & 다운로드 관련 질문
0
2285
2
a[title] 질문드립니다
0
378
1
리뉴얼 강의 및 공부 방법
0
583
1
jwt decode
0
1131
1
node.js 교과서 3판 질문드립니다
0
393
1
passport와 jwt
0
436
1
리뉴얼 강의
0
421
2
혹시 Node.js 교과서 3판 이북은 언제 나오나요?
0
355
1
몽고디비 사용자도 MYSQL부분을 들어야 하나요???
0
483
1
sql 쿼리 로그는 어떤 모듈이 작성하나요?
0
507
2
nunjucks res.render('error'); 작동을 안합니다.
0
513
1
질문있습니다.
0
348
1
multer 한글 파일 업로드시 파일명이 깨져요.
1
3538
1
수업자료는 어디있나요?
0
368
1
질문 있습니디
0
238
1
multer 사용시 file 외 name값은 못받나용?
0
419
1
코드 중복 부분 질문드립니다.
0
300
1
api 만드는 이유 질문드립니다.
0
290
1
Strategy의 done에 대해 질문드립니다.
0
368
1
안녕하세요 fs 권한 관련 질문드립니다
0
453
1
시퀄라이즈 연결질문...
0
502
2
res.setHeader vs res.cookie
0
1790
3





