자바스크립트에 대한 공부가 부족하다 느껴져서 일단 자바스크립트 부터 공부
const 배열 =[a,b,c,d,e]
{0:a,1:b,2:c,3:d,4:e}와 같다고 이해가 된다.
그래서 배열[0]을 통해서 배열에 있는 값을 가져올수 있었던것
원시 타입 : 값에 의한 복사 : 원시의 값을 직접 바라보는
a=1, b=a, a=2 순으로 실행한다면 -> a=2, b=1로 나타난다.
a는 1이 저장되있는 메모리를 바라보고있고 b도 같은 메모리를 바라보게 한뒤 a가 3이 저장된 메모리를 바라보게 바꾸게한것이어서
a,b사이에 관계는 없다.
참조 타입 : 참조에 의한 복사 = 주소의 값을 복사 : 객체나 배열은 다른 값을 바라보는 주머니를 바라보는
const obj1 = {
num: 1, str: 'ABC', bool: true
};
const obj2 = obj1;
obj1은 num,str,bool의 값을 직접 바라보고 있는것이 아니라
obj1->주소1:{num: 1이 저장된 주소, str:'ABC'가 저장된 주소, bool:true가 저장된 주소}를 바라보고 있는것이다.
obj2또한 obj2->주소1:{num: 1이 저장된 주소, str:'ABC'가 저장된 주소, bool:true가 저장된 주소}
obj2.num = 2;
obj2.str = '가나다';
obj2.bool = false;
obj2의 각 값을 바꾸면 {num: 2이 저장된 주소, str:'가나다'가 저장된 주소, bool:false가 저장된 주소}로 변경이 되어도 주소1이 바뀌지 않았기에 obj1또한 같이 바뀌게 된다.
식별자들이 유효하게 사용할 수 있는 범위 -> 변수,상수(let,const)를 선언 했을때 어디까지 적용이 되는지 스코프 단위로
const xx = 0;
let yy = 'hello';
console.log(xx, yy);
{
const xx = 1; //블록 안에서는 바깥의 const 재선언 가능
let yy = '안녕하세요';
console.log(xx, yy);
}
console.log(xx, yy);
//0 'hellow'
//1 '안녕하세요'
//0 'hellow'
스택 - 후입선출 -> 실행 스코프는 스택과 같다.
전역 변수상수, 지역 변수상수를 생각하고 코드를 작성해야 한다.
else if 를 많이 쓰지 말고 retrun으로 값을 나가고 if를 여러번 사용하자.
주어진 평가에 일치하는 case로 실행 위치 이동
switch (조건){
case 조건:
실행할 내용
break
}
default:
실행할 내용
break : 원하는 조건case를 실행후 switch를 나오는 구문
default : 만족하는 case가 없을떄 실행
반복 가능한(iterable, 이터러블) 객체는 배열을 일반화한 객체입니다. 이터러블 이라는 개념을 사용하면 어떤 객체에든 for..of 반복문을 적용할 수 있습니다.
몽고db ec2에 설치 -> 원래는 말이 안된다. db와 api서버는 분리가 되어야 한다.
api/posts/1
https://www.naver.com/search?keyword=“blah”&start_time=“20221210”
parm - 1
query - 조건을 설정
body - 서버에 변경사항을 보낼 때 Content-Type,application/json
역활별 Directory structure 분리 -> 유지보수 쉬움 : 디렉토리 구조를 잘 잡아야한다.
서버에서 페이지네이션 -> 분할로 서버에 전송 필요
/posts/:_postid -> _postid는 parm
POST /api/posts/:post_id/comments -> 상하 관계를 생각해서
app.listen -> port를 받아서 열겠다.
app.use -> 미들웨어
s를 올바르게 사용하자. key:value 이름이 같으면 하나만 적어도 된다.
"/" 엔트리 포인트(Entry point) -> 첫 화면, 맨 처음 루트에서만 사용하는 것이 옳다.
댓글 모델에서 user 는 user_id가 들어가야 한다. -> 참고하는 자료는 변하지않는 값으로
스키마 설계 단계에서 상관관계를 생각해서 고민을 해야한다.
에러핸들러도 app.js에 있어야한다.
몽고db연결하는 부분은 분리를 하는게 좋다.
app.use(express.json()) -> body-parser 역활 json을 유용하게 사용하기 위해
Returns middleware that only parses json and only looks at requests where the Content-Type header matches the type option.
verb가 리턴 값의 이름에 붙는 것은 좋은 네이밍 컨벤셔이 아니다.
타입은 엄격하게 지켜줘야 한다.
제약 조건을 설정할때 find({조건}) -> 필요한 조건만 걸어야 한다.
const post = await Posts.find({postId})
post가 있으면 postid를 가진 콜렉션이 db에 있다.
description 검색 필요
if문 best cass -> 필터링을 통해 불필요한 케이스를 쳐낸다.
createdAt -> 클라이언트에서 시간을 조작할 수 있기 때문에 body로 받으면 안되고 서버에서 해결
!는 0or1, true/false등 2분법으로 나눠지는 상황에서 사용하는게 좋다.
목록은 무조건 페이지네이션 필요
고유한 값인 id 값등은 body로 받으면 안된다.
"/posts/:postid/comments/:commentid"
const {postid,commentid} = req.params
모듈은 위에 모아서 정리
팀프로젝트를 하면서 겪는 실수 -> 실수는 예방이 불가능 하다. -> 실수를 공개하고 빠르게 고치자
반복적인 실험, 실행 -> 빠른 실행과 학습 : 일단 빨리 해보고 에러,문제등을 빠르게 파악 해결