강의

멘토링

커뮤니티

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

원피스를 찾아서님의 프로필 이미지
원피스를 찾아서

작성한 질문수

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

게시글 불러오기

질문있습니다.

작성

·

240

0

안녕하세요.

const oneUser = await User.findOne({
  where: {id: data}
});

await oneUser.addLikers(req.body) 

이런식으로 할려고 하는데 oneUser.addLikers not a function 이라는 알람이 뜨는데 무엇이 문제일까요?

답변 6

0

꺄오

0

뭘해서 된건지는 모르겠지만 됐네요 ㅜㅜ 제로초님의 힘인가봅니다.

은혜잊지 않겠습니다.

0

cannot read property 'addLikers' of null 동일하게 에러가 발생합니다.

//수정
  static associate(db) {    db.Post.belongsToMany(db.User, { through: 'Like', as: 'Likers',onDelete: 'cascade' }) //   }

몇시간동안 보고있는데 어떤걸 봐야할지도 모르겠습니다.

애초에 테이블생성될때 잘못된건지...

어떨때 저 에러가 나는지 말씀해주시면 거기 위주로 한번보겠습니다.!!

0

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

as: 'Liker'로 하셨는데 as: 'Likers'로 바꿔보세요.

0

// post .js

const DataTypes = require('sequelize');
const { Model } = DataTypes;

module.exports = class Post extends Model {
  static init(sequelize) {
    return super.init({
      // id가 기본적으로 들어있다.
      content: {
        type: DataTypes.TEXT,
        allowNull: false,
      },
      // RetweetId
    }, {
      modelName: 'Post',
      tableName: 'posts',
      charset: 'utf8mb4',
      collate: 'utf8mb4_general_ci', // 이모티콘 저장
      sequelize,
    });
  }
  static associate(db) {
    db.Post.belongsToMany(db.User, { through: 'Like', as: 'Liker',onDelete: 'cascade' }) // post.addLikers, post.removeLikers
  }
};

//. user.js

const DataTypes = require('sequelize');
const { Model } = DataTypes;

module.exports = class User extends Model {
  static init(sequelize) {
    return super.init({
      // id가 기본적으로 들어있다.
      username:{
        type: DataTypes.STRING(30),
        allowNull: false,
      },
      nickname: {
        type: DataTypes.STRING(30),
      },
      email: {
        type: DataTypes.STRING(60), //
        allowNull: false, // 필수
        unique: true, // 고유한 값
      },
      password: {
        type: DataTypes.STRING(200),
      },
      avatar: {
        type: DataTypes.TEXT,
      },
      snsId: {
        type: DataTypes.STRING(60)
      },
      provider: {
        type: DataTypes.STRING(60)
      }
    }, 
   
    {
      modelName: 'User',
      tableName: 'users',
      charset: 'utf8',
      collate: 'utf8_general_ci', // 한글 저장
      sequelize,
    });
  }
  static associate(db) {
    db.User.belongsToMany(db.Post, {through: 'Like', as:"Liked", onDelete: 'cascade'});
  }
};

// index.js

'use strict';
const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.js')[env];
const user = require('./user');
const post = require('./post');
const db = {};
let sequelize;
if (config.use_env_variable) {
  sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
  sequelize = new Sequelize(config.database, config.username, config.password, config);
}
// fs
//   .readdirSync(__dirname)
//   .filter(file => {
//     return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
//   })
//   .forEach(file => {
//     const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
//     db[model.name] = model;
//   });
db.User = user;
db.Post = post;


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;

// routes xxx.js
// 연습으로 하는거라 양해부탁해요!!
 Post.findOne({
        where: { content: 1 }
      })
        .then((res) => {
          res.addLikers(2)
        }) // error

0

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

먼저 addLiker로 한 번 바꿔보시고요. 그래도 안 된다면 models/user.js 코드에 문제가 있을 확률이 높습니다. models/index.js랑 models/user.js 올려주시면 됩니다.

원피스를 찾아서님의 프로필 이미지
원피스를 찾아서

작성한 질문수

질문하기