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

문종현님의 프로필 이미지
문종현

작성한 질문수

Vue로 Nodebird SNS 만들기

5-4. 이미지 저장하기

이미지 업로드가 안돼서 질문드립니다

작성

·

174

0

5-4 강의 마지막에 제로초님은 설정한대로 사진 2개 3개 업로드가 되는데 

errors: [

    ValidationErrorItem {

      message: 'Image.email cannot be null',

      type: 'notNull Violation',

      path: 'email',

      value: null,

      origin: 'CORE',

      instance: [Image],

      validatorKey: 'is_null',

      validatorName: null,

      validatorArgs: []

    }

  ]

}

SequelizeValidationError: notNull Violation: Image.email cannot be null

    at InstanceValidator._validate (C:\Users\com\vue강좌\vuesns\ch1\back\node_modules\sequelize\lib\instance-validator.js:78:13)

    at processTicksAndRejections (internal/process/task_queues.js:93:5)

    at async InstanceValidator._validateAndRunHooks (C:\Users\com\vue강좌\vuesns\ch1\back\node_modules\sequelize\lib\instance-validator.js:111:7)

    at async InstanceValidator.validate (C:\Users\com\vue강좌\vuesns\ch1\back\node_modules\sequelize\lib\instance-validator.js:93:12)

    at async model.save (C:\Users\com\vue강좌\vuesns\ch1\back\node_modules\sequelize\lib\model.js:3890:7)

    at async Function.create (C:\Users\com\vue강좌\vuesns\ch1\back\node_modules\sequelize\lib\model.js:2207:12)

    at async Promise.all (index 0)

    at async C:\Users\com\vue강좌\vuesns\ch1\back\routes\post.js:46:32

POST /post 500 17.596 ms - 1119

이러한 업로드가 떠서 더이상 진행이 되지 않아 질문드려요 

ch1\back\routes\post.js:46:32

이부분에 오류인거 같아 확인해보았는데

if(req.body.image) {
            if(Array.isArray(req.body.image)) {
                const images = await Promise.all(req.body.image.map((image=> {
                    return db.Image.create({ srcimagePostIdnewPost.id })
                }))
            } else {
                const image = await db.Image.create({ srcreq.body.imagePostIdnewPost.id})
            }
       }

정확히는 const images 의 await바로 앞입니다.

어떤부분이 잘못된지 모르겠어 제로초님의 코드랑 비교해봤는데 답이 나오지 않아 질문드려요 ㅜ

답변 1

0

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

에러메시지에 image.email이라고 되어있는데요. image 테이블에는 email 컬럼이 있으면 안 되는데 뭔가 잘못 들어간 것 같습니다. 워크벤치 같은 걸로 email 컬럼이 진짜 들어가있는지 확인해보세요. 있다면 image 테이블 지웠다가 서버 재시작해서 재생성하셔야 합니다.

문종현님의 프로필 이미지
문종현
질문자

피드백 감사합니다

제로초님 말씀데로 워크벤치 들어가 보니 email이 있어서 그거 지우고 다시 시작했더니 

sql: 'SELECT `Post `.`id`, `Post `.`content`, `Post `.`createdAt`, `Post `.`updatedAt`, `Post `.`UserId`, `User`.`id` AS `User.id`, `User`.`nickname` AS `User.nickname`, `Images`.`id` AS `Images.id`, `Images`.`email` AS `Images.email`, `Images`.`createdAt` AS `Images.createdAt`, `Images`.`updatedAt` AS `Images.updatedAt`, `Images`.`PostId` AS `Images.PostId` FROM `Post s` AS `Post ` LEFT OUTER JOIN `Users` AS `User` ON `Post `.`UserId` = `User`.`id` LEFT OUTER JOIN `Images` AS `Images` ON `Post `.`id` = `Images`.`PostId` WHERE `Post `.`id` = 4;',

  parameters: undefined

}

SequelizeDatabaseError: Unknown column 'Images.email' in 'field list'

    at Query.formatError (C:\Users\com\vue강좌\vuesns\ch1\back\node_modules\sequelize\lib\dialects\mysql\query.js:265:16)

    at Query.run (C:\Users\com\vue강좌\vuesns\ch1\back\node_modules\sequelize\lib\dialects\mysql\query.js:77:18)

    at processTicksAndRejections (internal/process/task_queues.js:93:5)

    at async C:\Users\com\vue강좌\vuesns\ch1\back\node_modules\sequelize\lib\sequelize.js:619:16

    at async MySQLQueryInterface.select (C:\Users\com\vue강좌\vuesns\ch1\back\node_modules\sequelize\lib\dialects\abstract\query-interface.js:953:12)

    at async Function.findAll (C:\Users\com\vue강좌\vuesns\ch1\back\node_modules\sequelize\lib\model.js:1753:21)

    at async Function.findOne (C:\Users\com\vue강좌\vuesns\ch1\back\node_modules\sequelize\lib\model.js:1917:12)

    at async C:\Users\com\vue강좌\vuesns\ch1\back\routes\post.js:53:26

POST /post 500 38.737 ms - 1181

이러한 에러가 뜹니다 ㅜ 어떻게 해야 할까요??

문종현님의 프로필 이미지
문종현
질문자

SequelizeDatabaseError: Unknown column 'Images.email' in 'field list'

    at Query.formatError (C:\Users\com\vue강좌\vuesns\ch1\back\node_modules\sequelize\lib\dialects\mysql\query.js:265:16)

    at Query.run (C:\Users\com\vue강좌\vuesns\ch1\back\node_modules\sequelize\lib\dialects\mysql\query.js:77:18)

    at processTicksAndRejections (internal/process/task_queues.js:93:5)

    at async C:\Users\com\vue강좌\vuesns\ch1\back\node_modules\sequelize\lib\sequelize.js:619:16

    at async MySQLQueryInterface.select (C:\Users\com\vue강좌\vuesns\ch1\back\node_modules\sequelize\lib\dialects\abstract\query-interface.js:953:12)

    at async Function.findAll (C:\Users\com\vue강좌\vuesns\ch1\back\node_modules\sequelize\lib\model.js:1753:21)

    at async C:\Users\com\vue강좌\vuesns\ch1\back\routes\posts.js:12:23
새로고침 하면 이러한 에러가 뜨는데 

    at async C:\Users\com\vue강좌\vuesns\ch1\back\routes\posts.js:12:23

이부분은 

router.get('/'async (reqres ,next=> {
    try {
        const posts = await db.Post.findAll({
            include: [{
                modeldb.User,
                attributes: ['id''nickname']
            }, {
                modeldb.Image
            }],
            order: [['createdAt''DESC']],
            offsetparseInt(req.query.offset10|| 0,
            limitparseInt(req.query.limit10|| 10,
        })
        res.json(posts)
    } catch (err) {
        console.error(err)
        next(err)
    }
})

여기서 const posts 뒤 await 바로 앞 자리 입니다 ㅜ

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

models/image.js에서 image 모델 안에 email이 들어있는 거 아닌가요?

문종현님의 프로필 이미지
문종현
질문자

감사합니다!!

오타가 있어서 수정했습니다

근데 수정했더니 ㅜ 

SequelizeDatabaseError: Unknown column 'src' in 'field list'

    at Query.formatError (C:\Users\com\vue강좌\vuesns\ch1\back\node_modules\sequelize\lib\dialects\mysql\query.js:265:16)

    at Query.run (C:\Users\com\vue강좌\vuesns\ch1\back\node_modules\sequelize\lib\dialects\mysql\query.js:77:18)

    at processTicksAndRejections (internal/process/task_queues.js:93:5)

    at async C:\Users\com\vue강좌\vuesns\ch1\back\node_modules\sequelize\lib\sequelize.js:619:16

    at async MySQLQueryInterface.insert (C:\Users\com\vue강좌\vuesns\ch1\back\node_modules\sequelize\lib\dialects\abstract\query-interface.js:749:21)

    at async model.save (C:\Users\com\vue강좌\vuesns\ch1\back\node_modules\sequelize\lib\model.js:3967:35)

    at async Function.create (C:\Users\com\vue강좌\vuesns\ch1\back\node_modules\sequelize\lib\model.js:2207:12)

    at async Promise.all (index 0)

    at async C:\Users\com\vue강좌\vuesns\ch1\back\routes\post.js:46:32

POST /post 500 21.065 ms - 1213

이번엔 이런 에러가 뜨는데 어떻게 해결해야하는지 질문할수 있을까요??ㅜㅜ

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

unknown column 'x' 가 뭘 의미하시는지를 찾아보시는 게 좋을 것 같습니다. 안 그러면 같은 유형의 에러가 계속 생길때마다 질문하시게 될테니까요. 시퀄라이즈에서는 src가 있는 걸로 치는데 실제 db에는 없다는 뜻입니다. 왜  시퀄라이즈에는 src가 있고, 실제 db에는 src가 없는지 확인해보세요.

문종현님의 프로필 이미지
문종현
질문자

아 제로초님 감사합니다!!! 서버 재시작 후 완료 하였습니다!! 피드백 감사합니다!!!

문종현님의 프로필 이미지
문종현

작성한 질문수

질문하기