저장을 습관화

에러 기록 - TypeError: Cannot read properties of undefined (reading 'create') 본문

공부/node.js

에러 기록 - TypeError: Cannot read properties of undefined (reading 'create')

ctrs 2023. 6. 29. 00:08

- 증상

게시글 작성 API 테스트 중 post가 되지 않는 상황

 

관련 로그

const post = await Post.create({ title, content, password });
                          ^

TypeError: Cannot read properties of undefined (reading 'create')
    at C:(생략)\routes\posts.js:51:27
    at Layer.handle [as handle_request] (C:(생략)\node_modules\express\lib\router\layer.js:95:5)
    at next (C:(생략)\node_modules\express\lib\router\route.js:144:13)
    at Route.dispatch (C:(생략)\node_modules\express\lib\router\route.js:114:3)
    at Layer.handle [as handle_request] (C:(생략)\node_modules\express\lib\router\layer.js:95:5)
    at C:(생략)\node_modules\express\lib\router\index.js:284:15
    at Function.process_params (C:(생략)\node_modules\express\lib\router\index.js:346:12)
    at next (C:(생략)\node_modules\express\lib\router\index.js:280:10)
    at Function.handle (C:(생략)\node_modules\express\lib\router\index.js:175:3)
    at router (C:(생략)\node_modules\express\lib\router\index.js:47:12)

Node.js v18.16.0

 

- 원인

/routes/posts.js가 참조하고 있는  /models/post.js의 내용을 임의로 수정해서 발생한 문제

 

mySQL+sequelize 환경에서

/models의 내용은 migration 폴더의 내용에 따라 적용되고, 이 내용은 즉 DB의 내용임

 

하지만 내가 /routes/posts.js로 post하는 테이블 컬럼의 내용을 멋대로 작성하고,

이 내용을 꾸역꾸역 입력하기 위해 /models/post.js의 내용도 수정하자

시스템이 '너가 무슨 models를 참조하고 싶은건지 모르겠어 그런 컬럼 없는데?' 하면서 require도 끊어버림

 

post 명령이 수행되기 전 consoloe.log(Post)를 해보면 undefined가 나옴

 

Post가 어떤 변수인지 알지못하니 메소드 .create()도 어떤 함수인지 시스템이 알 수 없어 발생한 에러

 

 

※ /routes의 내용은 /models를 따라가야지 그 반대가 되어선 안된다.

 

마치 예전에 mongoDB+mongoose에서 scheema의 내용을 임의로 변경해서 발생했던 때와 같은 개념

https://ctrs.tistory.com/77

 

에러 기록 - MongoServerError: E11000 duplicate key error

1. 증상 mongoose를 이용하여 MongDB에 POST할 경우 발생 app.js의 실행을 강제적으로 종료시킴 에러 로그는 아래와 같음 C:(생략)\node_modules\mongodb\lib\operations\insert.js:50 return callback(new error_1.MongoServerError(r

ctrs.tistory.com

 

 

- 해결 방법

/models/post.js의 내용을 수정 전으로 되돌렸고

post의 테스트는 /models/post.js의 내용에 맞추어 /routes/posts.js의 내용을 조정하여 진행함