인프런 커뮤니티 질문&답변

송지훈님의 프로필 이미지
송지훈

작성한 질문수

[리뉴얼] React로 NodeBird SNS 만들기

안녕하세요. !! 제로초님 개인 프로젝트 만들고 있는데요.

작성

·

405

0

여기서 왜 addCategorys가 존재하지 않는 함수라고 하는지 알 수 있을까요??

addCategory라고 했을때도 똑같아용.

답변 10

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

쿼리를 세 번 날려서 좋지 않을 것 같습니다. findOrCreate할 때 이미 return값에 Category 정보(아이디까지)가 들어있어서 다시 findOne할 필요는 없습니다.

0

송지훈님의 프로필 이미지
송지훈
질문자

modelName: 'User',
tableName: 'users',
modelName: 'Category',
tableName: 'categorys',
되어있습니당.
일단은 add메서드 안쓰고 진행하는데 문제는 없는 프로젝트라
add가 필요한 상황에서는 말씀하신대로 진행해야 겟네요.
고마워요.!!

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

db.Post.belongsTo(db.Category, { as: 'Category' }) 이렇게 쓰는 임시방편이 있을 수 있겠습니다.

User랑 Category 모델들의 ModelName, tableName은 제대로 되어있죠?

0

송지훈님의 프로필 이미지
송지훈
질문자

model/post.js
const DataTypes = require('sequelize');
const { Model } = DataTypes;

module.exports = class Post extends Model {
  static init(sequelize) {
    return super.init(
      {
        title: {
          type: DataTypes.STRING(10),
          allowNull: false,
        },
        content: {
          type: DataTypes.TEXT,
          allowNull: false,
        },
      },
      {
        modelName: 'Post',
        tableName: 'posts',
        charset: 'utf8mb4',
        collate: 'utf8mb4_general_ci',
        sequelize,
      },
    );
  }
  static associate(db) {
    db.Post.belongsTo(db.User);
    db.Post.belongsTo(db.Category);
  }
};
model/index.js
const Sequelize = require('sequelize');
const category = require('./category');
const post = require('./post');
const user = require('./user');

const env = process.env.NODE_ENV || 'development';
const config = require('../config/config')[env];
const db = {};

const sequelize = new Sequelize(
  config.database,
  config.username,
  config.password,
  config,
);

db.Category = category;
db.Post = post;
db.User = user;

Object.keys(db).forEach((modelName=> {
  db[modelName].init(sequelize);
});
Object.keys(db).forEach((modelName=> {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;
router/post.js
const { PostCategoryUser } = require('../models');
이렇게 하였습니다.

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

혹시 Post의 associate 부분이 models/index에서 호출되었나요?

0

송지훈님의 프로필 이미지
송지훈
질문자

 await newPost.addUser(req.user.id);
이렇게 해보았는데 이것도 마찬가지로 is not a function 이라고 나와용.
죄송합니다. 감사합니다. ㅠㅠ

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

아, 생각해보니 post는 하나의 category에만 속해서 addCategory가 맞습니다. addCategory가 없다면 addUser도 없는지 한 번 확인해보세요.

0

송지훈님의 프로필 이미지
송지훈
질문자

제로초님 죄송한데

addCategories도 안되는데 이건 무슨 현상일까요?

0

송지훈님의 프로필 이미지
송지훈
질문자

await Category.findOrCreate({
      where: { name: category },
    });

    const findCategory = await Category.findOne({
      where: { name: category },
    });

    const newPost = await Post.create({
      title,
      content,
      UserId: req.user.id,
      CategoryId: findCategory.id,
   });
아 복수형이 자동 적용 되는군요. 정말 감사합니다.
일단 이렇게 했는데
이런 코드는 안티패턴인가요??

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

addCategories일 것 같습니다.

송지훈님의 프로필 이미지
송지훈

작성한 질문수

질문하기