inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지

시퀄라이즈 사용하기

시퀄라이즈 모델명 질문

225

코코

작성한 질문수 9

0

기존의 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;

시퀄라이즈 mysql mongodb nodejs Sequelize

답변 1

0

제로초(조현영)

db.User.hasMany(db.Post, db.Comment, {
      foreignKey: "uid",
      targetKey: "id",
    });

여기가 이상하네요.

0

코코

db.User.hasMany(db.Post, { foreignKey: "uid", targetKey: "id" });
db.User.hasMany(db.Comment, { foreignKey: "uid", targetKey: "id" });

로 바꾸니 잘되었습니다! 답변이 빠르셔서 굉장히 감동입니다ㅜ 감사합니다!

리눅스 노드 설치시 패키지

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