• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    해결됨

Cannot read properties of undefined (reading 'Op') 문제를 도와주시면 감사하겠습니다

22.06.05 10:44 작성 조회수 330

0

선생님 안녕하세요

선생님의 sns 예제 코드에서 app.js에서 아래의 소스코드를 추가해봤습니다

 

그런데, 구글링을 해봤는데도 에러가 해결이 안되어서 가르쳐주시면 정말 감사하겠습니다

app.js 소스코드입니다

const express = require('express');
const cookieParser = require('cookie-parser');
const morgan = require('morgan');
const path = require('path');
const session = require('express-session');
const nunjucks = require('nunjucks');
const dotenv = require('dotenv');
const passport = require('passport');

dotenv.config();
const pageRouter = require('./routes/page');
const authRouter = require('./routes/auth');
const postRouter = require('./routes/post');
const userRouter = require('./routes/user');

const { sequelize } = require('./models');
const { User,Sequelize:{Op} } = require('./models');
const passportConfig = require('./passport');

const app = express();
passportConfig(); // 패스포트 설정
app.set('port', process.env.PORT || 8001);
app.set('view engine', 'html');
nunjucks.configure('views', {
  express: app,
  watch: true,
});
sequelize.sync({ force: false })
  .then(() => {
    console.log('데이터베이스 연결 성공');
  })
  .catch((err) => {
    console.error(err);
  });

app.use(morgan('dev'));
app.use(express.static(path.join(__dirname, 'public')));
app.use('/img', express.static(path.join(__dirname, 'uploads')));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser(process.env.COOKIE_SECRET));
app.use(session({
  resave: false,
  saveUninitialized: false,
  secret: process.env.COOKIE_SECRET,
  cookie: {
    httpOnly: true,
    secure: false,
  },
}));
app.use(passport.initialize());
app.use(passport.session());

app.use('/', pageRouter);
app.use('/auth', authRouter);
app.use('/post', postRouter);
app.use('/user', userRouter);

User.find({
  attribute: ['email', 'nick'],
  where: {id: {[Op.in]: [1,2]}}
}).then((data)=>{
  console.log(JSON.stringify(data))
});


app.use((req, res, next) => {
  const error =  new Error(`${req.method} ${req.url} 라우터가 없습니다.`);
  error.status = 404;
  next(error);
});

app.use((err, req, res, next) => {
  res.locals.message = err.message;
  res.locals.error = process.env.NODE_ENV !== 'production' ? err : {};
  res.status(err.status || 500);
  res.render('error');
});

app.listen(app.get('port'), () => {
  console.log(app.get('port'), '번 포트에서 대기중');
});

 

user.js 소스코드입니다

const Sequelize = require('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',
      },
      snsId: {
        type: Sequelize.STRING(30),
        allowNull: true,
      },
    }, {
      sequelize,
      timestamps: true,
      underscored: false,
      modelName: 'User',
      tableName: 'users',
      paranoid: false,
      charset: 'utf8',
      collate: 'utf8_general_ci',
    });
  }

  static associate(db) {
    db.User.hasMany(db.Post);
    db.User.belongsToMany(db.User, {
      foreignKey: 'followingId',
      as: 'Followers',
      through: 'Follow',
    });
    db.User.belongsToMany(db.User, {
      foreignKey: 'followerId',
      as: 'Followings',
      through: 'Follow',
    });
  }
};

 

index.js 소스코드입니다

const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require('../config/config')[env];
const User = require('./user');
const Post = require('./post');
const Hashtag = require('./hashtag');

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

db.sequelize = sequelize;
db.User = User;
db.Post = Post;
db.Hashtag = Hashtag;

User.init(sequelize);
Post.init(sequelize);
Hashtag.init(sequelize);

User.associate(db);
Post.associate(db);
Hashtag.associate(db);

module.exports = db;

 

읽어주셔서 감사합니다

 

 

 

 

답변 1

답변을 작성해보세요.

0

models/index.js에서

db.Sequelize = Sequelize 안하셨네요.

답변해주셔서 감사합니다

강좌에서 

https://www.inflearn.com/course/%EB%85%B8%EB%93%9C-%EA%B5%90%EA%B3%BC%EC%84%9C/lecture/56921?tab=curriculum&volume=1.00

index.js에서

db.Sequelize = Sequelize 는 필요 없다고 말씀해주셔서 안적었는데,

혹시 index.js에서 db.Sequelize = Sequelize 을 안적고

app.js에서 Op.in을 사용하는 방법도 있는지도 질문드리고 싶습니다

강좌를 다시 찾아서 들었는데 다른 파일에서 require('sequelize') 하면 된다는 말씀으로 이해해서요

app.js에서

const Sequelize = require('sequelize'); 를 적어봤는데도 해결이 안되는 것 같습니다

가르쳐주시면 정말 감사하겠습니다

const Sequelize = require('sequelize');
const { sequelize } = require('./models');
const { User,Sequelize:{Op} } = require('./models');
 

Sequelize.Op.in 하시면 됩니다. 시퀄라이즈에서 꺼내오는겁니다.

선생님 가르쳐주셔서 감사합니다