21.10.30 노드교과서 Node.js 다뤄보기

2021. 11. 1. 15:44작업/Node

# 6-2 코드

파일명.set() .post() .get() .listen(파일명.get('포트'), 콜백함수)

 

index.html

 

# 6-3 미들웨어 = 콜백함수

파일명.use(콜백함수) 사용 -> 미들웨어를 use에 장착하는 느낌이다.

이렇게 미들웨어를 동시에 여러 개 넣어도 된다.

이 떄 콜백함수 안에 next()을 해줘야 다음 미들웨어로 넘어간다.

와일드 카드 사용 전(라우팅)
사용 후

단 와일드카드를 먼저 만나게 되면 hello wildcard가 먼저 실행된다. 따라서 와일드카드는 항상

다른 라우터보다 밑에 존재해야 한다.

이건 모든 get 요청 * 어떠한 주소든지 다 get을 처리하겠다.

*로 라우팅하면 이게 맨 위에 있을 경우 어떤 주소,카테고리를 쳐도 다 hello everybody만 뜬다.

 

# 6-4 미들웨어 추가설명, 에러

총정리 (set -> 공통미들웨어 -> 라우터 -> 에러 미들웨어 -> listen)

 

404 뜨는 지 확인. 공통 미들웨어에서 일단 throw error 지우고

일부러 200으로 보이게 한다. 해커들이 못 해킹하도록

한 라우터 내에서 여러번 send하면 에러가 뜬다. (공통 미들웨어 포함)

 

# 6-5

res.json()은 응답을 보낼 뿐이지 return처럼 함수를 종료하는 것이 아니다.

위: express 사용 X 아래: express 사용 후

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이 됨.

다시 돌아와서

cookie사용

여기서 잠깐 쿠키란? (Node.js에서 express사용 시)

<Cookie 생성하기>

<res.cookie() 메소드>

<cookie 읽기>

<cookie 업데이트>

<서명된 cookie>

<cookie 삭제하기>

출처 https://cinema4dr12.tistory.com/838

 

[WebApp / Express] Cookie를 사용하여 데이터 저장하기

이번 글에서는  Express Framework에서 cookie를 사용하여 데이터를 저장하고 읽어오는 방법에 대하여 알아보도록 하겠습니다. Cookie란 웹사이트가 사용자의 브라우저에 저장할 수 있는 작은 조각의

cinema4dr12.tistory.com

 

그리고 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가 더 이상 없다면 미들웨어가 끝나고

그렇게 되면 저 저장한 값이 메모리에서 안전하게 정리가 된다.

 

미들웨어 확장하기(미들웨어 속에 또 미들웨어)

예를 들어 로그인 한 사람한테만 미들웨어를 실행시키고 싶다

before

>> 이건 모든 상황에 실행이 됨. 따라서

after 미들웨어 속 또다른 미들웨어
미들웨어 확장법

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