댓글 조회 400 에러 메세지 문제 해결
mongoose의 objectId 가 12바이트 16진수로 정해져있기 때문에, 맞지 않는 타입의 문자열을 넣으면 400으로 넘어가는게 아니라 몽구스 자체 에러가 났다. 때문에 objectId의 유효성을 검사를 해서(isValid() 사용) 맞지 않은 형식이면 400으로 넘겨서 데이터형식이 맞지않는다는 메세지를 띄우도록 수정했다.
댓글 수정 400 에러 메세지 문제 해결
if문 조건부에서 !content이면 댓글 내용을 입력하라는 메세지를 띄우도록 했는데, content 요소가 야예 없거나, 빈 문자열이면 메세지가 잘 떴고,
"content": , 이러한 형식일 경우에는 에러가 났는데, 튜터님께 여쭤보니 위와같은 형태는 schemas에 맞지 않아서 불가능한 형태라고 하셔서 그대로 구현했다.
애플리케이션 highlight 설정 변경
highlight -> 설정-> #074006 -> f1-> reload window
라우트 index.js 모듈 분리
routes/index.js 에서 posts.js와 comments.js를 관리하고,
app.js 에서는 routes/index 만 라우팅 하도록 변경
게시글 기능은 잘 되는데 댓글조회부터 404 및 get api 접근 오류 발생, 팀원분께 도움을 요청하였다
// index.js
const router = express.Router();
router.use('/', postRouter)
router.use('/', commentRouter)
// 원래 전부 app.use로 그대로 써놨었다가 router.use로 수정
// comments.js
// try/catch문으로 에러 확인
// index.js - 경로를 기본경로에서 각 경로에 맞게 수정
router.use("/posts", postsRouter);
router.use("/comments", commentsRouter);
// 수정 이전에는 둘 다 기본 경로로 되어있었어서,
// 댓글 관련 요청도 post로 갔다가 꼬인 것 같음
// 수정 이후 모든 api 정상작동 확인
노드몬(저장시 서버자동재시작)
npm i nodemon
pakage.json ->script -> "start": "nodemon"
명령어 npm start
aws서버에서 db 안불러와지는 문제
아는게 없어서 찾아볼 엄두도 안나서 튜터님께 질문
그동안 저장한 곳은 로컬db라 인스턴스 서버에 데이터가 없는게 문제라고 하셨다
3T에서 해당 ip로 새 connection을 만드려고 하니 안됨(외부 접속 권한이 없어서)
아마존에서 인바운드 27017추가
git bash를 새로 열어서 aws 서버로 접속 후 mongodb 접속
$ ssh -i express-keypair.pem ubuntu@퍼블릭 ip //aws 서버로 접속
$ mongo // mongodb 접속
> show databases // data 보기
> use Express_BackEnd_Pj // switched to db Express_BackEnd_Pj
> show collections // collections 보기
>
comments
posts
> db.posts.find({}) // collection 전체 조회
mongodb 데이터 조회 명령어 참고 링크
https://minimilab.tistory.com/43
RESTful API
REST 는 representational State Transfer의 약자이고, REST 구성요소는 resource url, verb method, representation 3가지가 있다. RESTful API를 사용하면 확장성과 재사용성을 높여 유지보수 및 운용이 편리하며, http표준을 기반으로 구현하므로, http를 지원하는 프로그램 언어로 서버를 구축할 수 있다.
Q2 답변
url에 정보의 자원을 표현했고, 자원에 대한 행위는 http method(get, post, put, delete)로 표현했습니다.
컬렉션과 도큐먼트 이름에 단수명사와 복수명사, 대소문자를 적절히 사용했습니다.
자원에 대한 행위는 http method 네가지를 적절히 사용했습니다.
url에는 http method가 들어가지 않습니다.
url에 동사표현이 들어가지 않습니다.
경로 부분 중 변하는 부분, 즉 id는 고유한 값입니다.
슬래시 구분자(/)는 계층 관계를 나타내는데 사용했습니다.
url 마지막 문자로 슬래시를 포함하지 않습니다.
역할별로 Directory Structure를 분리하였을 경우 이점
Q3 답변
역할별로 디렉토리를 분리하면 코드의 모듈화가 용이해지고, 코드의 재사용성이 증가합니다. 또 새로운 역할이나 기능이 추가될 때 해당 역할의 디렉토리에 새로운 모듈 또는 파일을 추가하기만 하면 되기 때문에 확장성이 용이합니다. 그리고 팀 작업시에 도움이 됩니다.
내림차순 기능 추가, 서버 업데이트
.sort({ createdAt: -1 }); // 게시글조회, 댓글조회 api에 추가
파일 수정하고 git push 후 bash 열어서 서버 접속 후 sudo git pull로 땡김
ssh -i 키페어.pem ubuntu@퍼블릭IP
ls
cd 폴더명
sudo git pull
참고 : https://goodluckjieun.tistory.com/20
thunder로 해보니 로컬에선 되는데 서버에선 안됨
뭐지? aws 에서 쓰는 db 문젠가? sort가 서버에선 안되는 메서든가? 지금생각하면 말도안되지만 이것저것 찾아봄. 모르겠어서 팀원분께 여쭤봄
pm2 재시작을 안해줘서 그런거였음
sudo -s
pm2 restart 0
정상작동 확인