inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

프로젝트 구조 갖추기

경매 진행 메인 화면에서 오류 발생

315

작성자 없음

작성한 질문수 0

0

경매 코드를 작성한 후 동작을 시켰을 때 메인 화면에 아래 그림과 같은 에러가 발생 하였습니다

image.png

에러 발생 부분의 코드는 controllers/index.js 파일 부분인데 특별한 오류 점을 찾을 수가 없어 (작성한 파일들은 guithub 에 올려주신 파일들과 비교할 때 틀린 점을 발견하지 못함) 강사님께 문제 해결을 위해 질문 드립니다

해당 코드 부분

try {
    const yesterday = new Date();
    yesterday.setDate(yesterday.getDate() - 1); //어제시간
    const goods = await Good.findAll( {
      where: { SoldId: null, createdAt: { [Op.gte] : yesterday} },
    });
    res.render ('main', {
      title: 'NodeAuction',
      goods,
    });

에러 로그 내용:

Error
    at Query.run (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\sequelize\lib\dialects\mysql\query.js:52:25)    at D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\sequelize\lib\sequelize.js:315:28
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async MySQLQueryInterface.select (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\sequelize\lib\dialects\abstract\query-interface.js:407:12)
    at async Good.findAll (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\sequelize\lib\model.js:1140:21)    
    at async exports.renderMain (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\controllers\index.js:7:19) {
  name: 'SequelizeDatabaseError',
  parent: Error: Unknown column 'Good.SoldId' in 'where clause'
      at Packet.asError (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\packets\packet.js:728:17) 
      at Query.execute (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\commands\command.js:29:26) 
      at Connection.handlePacket (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\connection.js:481:34)
      at PacketParser.onPacket (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\connection.js:97:12)
      at PacketParser.executeStart (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\packet_parser.js:75:16)
      at Socket.<anonymous> (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\connection.js:104:25) 
      at Socket.emit (node:events:518:28)
      at addChunk (node:internal/streams/readable:559:12)
      at readableAddChunkPushByteMode (node:internal/streams/readable:510:3)
      at Readable.push (node:internal/streams/readable:390:5) {
    code: 'ER_BAD_FIELD_ERROR',
    errno: 1054,
    sqlState: '42S22',
    sqlMessage: "Unknown column 'Good.SoldId' in 'where clause'",
    sql: "SELECT `id`, `name`, `img`, `price`, `createdAt`, `updatedAt`, `deletedAt` FROM `goods` AS `Good` WHERE (`Good`.`deletedAt` IS NULL AND (`Good`.`SoldId` IS NULL AND `Good`.`createdAt` >= '2024-07-02 01:58:59'));",
    parameters: undefined
  },
  original: Error: Unknown column 'Good.SoldId' in 'where clause'
      at Packet.asError (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\packets\packet.js:728:17) 
      at Query.execute (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\commands\command.js:29:26) 
      at Connection.handlePacket (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\connection.js:481:34)
      at PacketParser.onPacket (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\connection.js:97:12)
      at PacketParser.executeStart (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\packet_parser.js:75:16)
      at Socket.<anonymous> (D:\Javascript_Work\node_works\node_js_3\skyc_work\node_auction\node_modules\mysql2\lib\connection.js:104:25) 
      at Socket.emit (node:events:518:28)
      at addChunk (node:internal/streams/readable:559:12)
      at readableAddChunkPushByteMode (node:internal/streams/readable:510:3)
      at Readable.push (node:internal/streams/readable:390:5) {
    code: 'ER_BAD_FIELD_ERROR',
    errno: 1054,
    sqlState: '42S22',
    sqlMessage: "Unknown column 'Good.SoldId' in 'where clause'",
    sql: "SELECT `id`, `name`, `img`, `price`, `createdAt`, `updatedAt`, `deletedAt` FROM `goods` AS `Good` WHERE (`Good`.`deletedAt` IS NULL AND (`Good`.`SoldId` IS NULL AND `Good`.`createdAt` >= '2024-07-02 01:58:59'));",
    parameters: undefined
  },
  sql: "SELECT `id`, `name`, `img`, `price`, `createdAt`, `updatedAt`, `deletedAt` FROM `goods` AS `Good` WHERE (`Good`.`deletedAt` IS NULL AND (`Good`.`SoldId` IS NULL AND `Good`.`createdAt` >= '2024-07-02 01:58:59'));",
  parameters: {}
}

node.js mysql express

답변 3

0

cumulonimbus69

강사님, 결국엔 good.js 파일에 associate 함수가 associte 로 오자가 있었네요 수정하니 잘 됩니다^^

0

cumulonimbus69

강사님,말씀 하신 데로 workbench에 이상하게 goods table에 SoldID 칼럼이 생성 되어 있지 않습니다. auctions table에는 GoodId, UserId 칼럼이 생성되어 있는데요..

image.png

참고로 models/index.js 파일 코드를 올립니다

const Sequelize = require('sequelize');
const fs = require('fs');
const path = require('path');

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.sequelize = sequelize;
//db.Sequelize = Sequelize;

const basename = path.basename(__filename); //현재 작업하는 file 이름 찾을려고
fs
  .readdirSync(__dirname)
  .filter( file => { // linux 에서는 앞에 . 가 붙으면 숨김파일임
    return file.indexOf('.') !== 0 && file !== basename && file.slice(-3) === '.js';
  })
  .forEach( (file) => {
    const model = require(path.join(__dirname, file));
    console.log(file, model.name);
    db[model.name] = model;
    model.initiate(sequelize);
  //model.associate(sequelize); <-- 이건 안됨 여기서, 왜? 모델 생성 다하고 서로간 연결 해야 하므로...
  });

Object.keys(db).forEach(modelName => {
  //console.log(db, modelName);
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

module.exports = db;

0

제로초(조현영)

sequelize.sync({ force: true }) 로 수정해서 서버 재실행하면 테이블 제대로 생성될 겁니다(데이터는 전부 날아갑니다)

0

제로초(조현영)

모델 스키마 한 번 보여주셔야할 것 같고요. soldId 소문자로도 한 번 해보세요.

0

cumulonimbus69

소문자로 시도했는데 해결 되진 않습니다 강사님

image.png

good.js 입니다

const { STRING } = require('sequelize');
const Sequelize = require('sequelize');

class Good extends Sequelize.Model {
  static initiate(sequelize) {
    Good.init({
      name: {
        type: Sequelize.STRING(40),
        allowNull: false,
      },
      img : {
        type: Sequelize.STRING(200),
        allowNull: true,
      },
      price: {
        type: Sequelize.INTEGER,
        allowNull: false,
        defaultValue: 0,
      },
    }, {
      sequelize,
      timestamps: true, //createdAt, updatedAt
      underscored: false,
      modelName: 'Good',
      tableName: 'goods',
      paranoid: true,  //deletedAt // soft delete
      charset: 'utf8mb4',
      collate: 'utf8mb4_general_ci',  

    });
  }
  static associte(db) {
    db.Good.belongsTo(db.User, {as: 'Owner' });
    db.Good.belongsTo(db.User, {as: 'Sold' });
    db.Good.hasMany(db.Auction);
  }
};

module.exports = Good;

user.js 입니다

const { STRING } = require('sequelize');
const Sequelize = require('sequelize');

class User extends Sequelize.Model {
  static initiate(sequelize) {
    User.init( {
      email: {
        type: Sequelize.STRING(40),
        allowNull: true,
        unique: true,
      },
      nick : {
        type: Sequelize.STRING(15),
        allowNull: false,
      },
      password: {
        type: Sequelize.STRING(100),
        allowNull: true,
      },
      money: {
        type: Sequelize.INTEGER,
        allowNull: false,
        defaultValue: 0,
      }
      /*
      provider: {
        type:Sequelize.ENUM('local','kakao'),
        allowNull: false,
        defaultValue: 'local',
      },
      snsId: {
        type: Sequelize.STRING(30),
        allowNull: true,
      }
      */
    }, {
       sequelize,
       timestamps: true, //createdAt, updatedAt
       underscored: false,
       modelName: 'User',
       tableName: 'users',
       paranoid: true,  //deletedAt // soft delete
       charset: 'utf8mb4',
       collate: 'utf8mb4_general_ci',  
    });
  }

  static associate(db) {
    db.User.hasMany(db.Auction);
    /*
    db.User.belongsToMany(db.User, { // 팔로워
      foreignKey: 'followingId',
      as: 'Followers',
      through: 'Follow'
    })
    db.User.belongsToMany(db.User, { // 팔로잉
      foreignKey: 'followerId',
      as: 'Followings',
      through: 'Follow'
    })
    */
  }
}

module.exports = User;

0

제로초(조현영)

associate 함수 호출하는 부분이 있나요? associate 부분이 호출이 안 되어 SoldId가 생성되지 않은 것 같습니다. 워크벤치로 테이블 보시면 더 명확할 것 같네요.

깃헙 질문

0

80

2

강의 1-1 수업노트의 로드맵 링크가 작동하지 않습니다.

0

75

1

aws - lightsail 이용 관련

0

57

1

4강 http 서버 만들때 ESM방식으로 해도 될까요?

0

79

2

모듈 사용 시 단점이 있나요?

0

80

1

node.js 버전 및 typescript 적용 문의

0

92

2

12.7. 방장기능(강퇴) 질문드립니다.

0

79

2

12.7 socket.js코드 그대로 뱃겨서 했는데, socket.request.session.color가안나오네요

0

68

1

12.7 코드 그대로 뱃겨서 햇는데 스샷같이 오류가뜹니다.

0

74

2

12.7.1스스로 해보기 질문되나요

0

90

3

시퀄라이즈 실습하기 질문드립니다.

0

188

9

<7-5. 시퀄라이즈 사용하기>수업 질문 드립니다.

0

95

2

크롬에서 user id를 인풋에 입력하고 등록하면 404 에러처리 페이지가 뜹니다.

0

110

2

구매 결제관련 질문입니다 !

0

121

1

다수의 supertest 가 실행될 때 force:true로 인한 DB 초기화 문제

0

132

2

node 설치 방법이 전혀다르게 바뀐것 같습니다.

0

149

2

12강 깃허브에 있는 12.7 chat.html 복붙했는데 css오류

0

120

2

무료/프리미엄 동시 소유 시 질문

0

115

1

비주얼 스튜디오 코드로 계속 진행해도 괜찮을까요?

0

134

2

10강 cors에러 localhost:4000으로 접속했을때 에러

1

156

2

webstorm 해결할 수 없는 변수 문제

0

153

2

혹시 몽고DB 쓸거면 MySQL 강의 스킵해도 되나요?

0

147

2

LightSail 실행 중 오류 질문드립니다!

0

201

2

RedisStore 사용법 질문

0

131

2