Computer Science/Web

Node.js Express Framework에 대해서 미들웨어와 라우터 등 간략 정리

TwinParadox 2020. 6. 25. 20:42
728x90

bin/www

http모듈에 express 모듈을 연결하고, 포트 지정하는 부분

콘솔 명령어로도 만들 있으며 그때, 주석처리된 #!/usr/bin/env node 사용됨

전역 설치 rimraf 같이 명령어로도 실행할 있음

 

var app=require('../app');
var debug=require('debug')('learn-express:server');
var http=require('http');

app, debug, http 모듈 가져옴

 

var port=normalizePort(process.env.PORT || '3000');
app.set('port',port);

실행될 포트 지정, 기본 3000

데이터를 app.set으로 지정하고, app.get으로 가져올 있음

 

 

var server=http.createServer(app);

http.createServer 불러온 app 모듈을 넣어 app 모듈이 createServer 메서드의 콜백 함수 역할을 하게

 

 

server.listen(port);
server.on('error',onError);
server.on('listening',onListening);

listen http 서버와 동일, 포트 연결 서버 실행

 

 

미들 웨어

  • 요청과 응답의 중간에 위치하며, 라우터와 에러 헨들러가 일종의 미들웨어
  • Express 전부인 셈이며, 요청과 응답을 조작해 기능을 추가하고 Bad Request 걸러낼 있음
  • 주로 app.use 함께 사용되며 app.use 인자로 들어 있는 함수가 미들웨어
  • 미들웨어는 use 메서드로 app 장착하여, logger('dev')부터 시작해 다른 미들웨어들을 순차적으로 거치고 라우터에서 클라이언트에 응답을 보냄
  • 커스텀 미들웨어를 만들 경우 반드시 next() 해줘서 다음 미들웨어로 넘겨야
  • 기존의 미들웨어는 내부적으로 next(0 호출하여 넘어가고 있으며, next() 통해 흐름을 제어 가능
  • next 인자로는 route 다른 인자를 넣을 있는데 route 넣으면 특수한 기능 수행
  • 이외의 값은 다른 미들웨어를 건너 뛰고 바로 error handler 이동
  • 콘솔의 출력 결과로 나오는 요청 주소, 상태 코드, 응답속도, 응답 바이트 등은 morgan 미들웨어에서 나옴
  • 파일이나 데이터베이스에 로그를 남기는 것을 morgan에서도 있지만, winston 모듈을  많이 사용

 

body-parser

데이터, AJAX 주로 처리하는 미들웨어

모든 본문을 해석해주는 것은 아니며 multipart/form-data 같은 폼을 통해 전송된 데이터는 해석 불가

 

cookie-parser

Request 동봉된 쿠키 해석

 

static

정적인 파일 제공

Request 부합하는 정적 파일을 발견한 경우 Response 해당 파일을 전송

파일을 넘기면 다음 라우터가 실행되지 않고, 에러가 나오면 라우터로 넘김

정적 파일 라우터 기능을 수행하므로, 최대한 위에 배치하여 서버가 쓸데없는 미들웨어 작업을 하는 것을 방지 가능

서비스에 따라서 알맞은 위치를 선택하면

 

express-session

세션 관리용 미들웨어

로그인 등의 기능 때문에 세션 구현 유용

express-session으로 직접 설치하여 사용

인자로 세션에 대한 설정을 받음

세션 관리  클라이언트에 세션 쿠키를 보내며, 안전 전송을 위해서는 서명이 필요

쿠키에 대한 옵션은 일반적인 쿠키 옵션과 동일하게 설정 가능

  • resave - 요청이 왔을 세션에 수정사항이 없더라도 세션 저장 여부 설정
  • saveUninitialized - 세션에 저장할 내역이 없더라도 세션 저장 여부 설정, 방문자 추적용으로 종종 사용
  • secret - 필수항목, cookie-parser 비밀키와 동일한 역할

 

connect-flash

일회성 메세지들을 브라우저에 나타날 좋은 , 직접 설치 필요

cookie-parser, express-session 사용하므로 이들보다 뒤에 위치

 

 

Router 객체

app.js

  • 라우터도 일종의 미들웨어로 있고, 다른 미들웨어와 다르게 앞에 주소가 붙어 있음
  • 라우팅 미들웨어는 인자로 주소를 받고, 특정 주소에 해당 요청이 왔을 동작하게 있음
  • use 대신, HTTP 메서드인(get, post, put, patch, delete) 등을 사용 가능하며, 주소와 요청 메서드가 동일할 실행됨

 

route 디렉토리 내부의 js 파일 들의 라우터

  • app.use처럼 router 역시 use 아닌 HTTP 메서드 활용 가능
  • router 하나에 여러 미들웨어 부착 가능
  • 라우터를 사용하지 않고 app.js에서 기능은 동일하게 사용할 있으나, 코드 관리를 위해 라우터를 분리하는
  • 라우터는 반드시 request 대한 response error handler request 넘겨야
  • response 없으면 브라우저가 계속 응답을 기다려서 로딩 로고가 있음
  • 라우터를 통해 쿼리스트링 처리도 용이
  • response 메서드는 여러 형태가 있음
728x90