2021. 11. 1. 15:44ㆍ작업/Node
# 6-2 코드
# 6-3 미들웨어 = 콜백함수
파일명.use(콜백함수) 사용 -> 미들웨어를 use에 장착하는 느낌이다.
이 떄 콜백함수 안에 next()을 해줘야 다음 미들웨어로 넘어간다.
단 와일드카드를 먼저 만나게 되면 hello wildcard가 먼저 실행된다. 따라서 와일드카드는 항상
다른 라우터보다 밑에 존재해야 한다.
*로 라우팅하면 이게 맨 위에 있을 경우 어떤 주소,카테고리를 쳐도 다 hello everybody만 뜬다.
# 6-4 미들웨어 추가설명, 에러
총정리 (set -> 공통미들웨어 -> 라우터 -> 에러 미들웨어 -> listen)
404 뜨는 지 확인. 공통 미들웨어에서 일단 throw error 지우고
일부러 200으로 보이게 한다. 해커들이 못 해킹하도록
한 라우터 내에서 여러번 send하면 에러가 뜬다. (공통 미들웨어 포함)
# 6-5
res.json()은 응답을 보낼 뿐이지 return처럼 함수를 종료하는 것이 아니다.
throw error는 너무 대놓고.. 이렇게 try {} catch {}로 은근히
next(인수) next에 인수가 들어있으면 바로 error처리 미들웨어로 넘어간다.
next('route') 하면 그 같은 라우터의 다음 콜백함수로 넘어가는 게 아니라 다음 라우터로 넘어간다.
-> if문 등을 사용해서 중복 줄이기 좋음
# 6-6 norgan,
npm i morgan cookie-parser express-session
그리고 편리성을 위해 npm install nodemon --save
근데 오류가 뜸 나는 npm run start도 안됨
일단 다른사람들은 보니 package.json에 이런 항목이 있음
엥 그러다가 다시 nodemon이 됨.
다시 돌아와서
여기서 잠깐 쿠키란? (Node.js에서 express사용 시)
<Cookie 생성하기>
<res.cookie() 메소드>
<cookie 읽기>
<cookie 업데이트>
<서명된 cookie>
<cookie 삭제하기>
출처 https://cinema4dr12.tistory.com/838
그리고 express.json 과 express.urlencoded라는 것을 사용한다.
이런 식으로 body parser대신 최신 버전으로다가 body값을 JSON으로 요청/응답하는 것 같다.
그리고 urlencoded는 옵션인 것 같은데
(http모듈로만 post body를 파싱하려면, req.on('data', function(chunk) { body += chunk; }); 와 같이 이벤트를 등록해야한다. 그 다음에 인코딩처리를 해줘야한다.
그치만 body-parser를 쓰고 bodyParser.urlencoded()를 등록하면, 자동으로 req에 body속성이 추가되고 저장된다. 만약 urls에 접근하고싶다면, req.body.urls이다. 인코딩도 default로 UTF-8로 해준다. 이벤트 등록할 필요 자체가 사라진다.)
# 6-7 static
정적 파일(pdf, 이미지, html, css) 요청 - fs 대신 사용하기 좋음
요청 경로랑 실제 경로가 다르기에 보안에도 도움이 된다.
요청 경로란 예를 들어 저 페이지에서 seoyoon.png를 요청했다.
그러면 요청 경로는 localhost:3000/seoyoon.png가 되는 것임.
그리고 미들웨어간 순서도 중요 보통 set -> morgan -> express.static
(사진만 찾으면 되는데 쓰이지도 않는 parsing을 많이 거치게 되기 때문)
static은 파일을 찾으면 next를 실행하지 않는다. 요청 주소에 따라 미들웨어가 어디까지 실행되느냐가 달라진다.
cookieParser과 session()은 로그인 할 때 주로 사용함.
# 6-8 session과 미들웨어 확장법
session이란 요청을 보낸 해당 사용자에 대한 객체이다. 개인의 요청마다 개인의 저장공간을 만들어 주는 것.
잠깐 팁
서로 다른 라우터?미들웨어 간 정보를 넘겨주고 싶을 때
이렇게 전역변수를 정의하면 큰일남. 다른 사람이 내 비번을 볼 수 있음.
해결1
해결2
그러므로 이렇게 req.session.data = 넘겨줄 값 해서 서로 다른 미들웨어간 정보를 공유할 수 있다.
단 이 방법은 다음에도 저장한 값이 계속 남아있다.
일회성으로 넘겨주고 싶다면?
req.data로 해준다. req는 같은 req기 때문에 next가 더 이상 없다면 미들웨어가 끝나고
그렇게 되면 저 저장한 값이 메모리에서 안전하게 정리가 된다.
미들웨어 확장하기(미들웨어 속에 또 미들웨어)
예를 들어 로그인 한 사람한테만 미들웨어를 실행시키고 싶다
>> 이건 모든 상황에 실행이 됨. 따라서
6-9 multer
npm install multer --save
import
잠깐 업로드 라우팅 페이지
여러 개 multiple, upload.array사용
여러 파일
6-10 비밀키
아까 'seoyoonpassword' 부분을 이렇게 바꿈
출처: https://semtax.tistory.com/7
출처: https://sjh836.tistory.com/154 [빨간색코딩]
'작업 > Node' 카테고리의 다른 글
(코드용) 줌 클론코딩 1~2장 (0) | 2021.11.02 |
---|---|
21.10.27 Node js Express의 효용 (0) | 2021.10.27 |
21.10.27 Node.js 한 시간 만에 끝내기 (0) | 2021.10.27 |