1. Express 소개

: 경량 HTTP 웹 프레임 워크

: 요청과 응답

: 미들웨어 사용

: 템플릿 엔진

: 설치

: npm install express

미들웨어

: 요청 분석, 처리하는 모듈

: 여러개의 미들웨어로 구성

: 미들웨어 사용설정

: app.use(미들웨어) 

: app = express()

: app.use(function(){})

라우팅

: 요청 -> 요청 처리 미들웨어로 분배

: HTTPMethod 별로 라우팅

: URL 경로 별로 라우팅

: method 별로, 경로 별로 가능

Express 요청

: 요청분석

: req.query - 쿼리 문자열

: req.path - 요청 URL 중 경로

: req.params - URL의 파라미터

: req.cookie : 요청 메세지 내 쿠키(쿠키파서 필요)

: req.body : 요청 메시지 바디 분석 (바디 파서 필요)

Express 응답

다양한 응답 메소드

: res.json() - JSON 응답 메시지 전송

: res.redirect() - 리다이렉션 응답 전송

: res.render() - 템플릿으로 렌더링

: res.send() - JSON, HTML, Buffer 전송, 메시지 헤더에 Content-Type 자동설정

: res.sendStatus() : 상태 코드와 상태 메시지 전송

: res.status() : 상태 코드 설정. 응답 메소드 종료 안함

: res.download() : 파일 다운로드

2. Express 미들웨어

미들웨어

: 미들웨어 기반의 프레임 워크

: connect

: Express

: 미들웨어

: 작은 단위 모듈

: 요청과 응답 처리 함수 형태

: Express 앱

: 다수의 미들웨어 조합으로 동작

: Express 앱의 요청 다루기

: 하나의 미들웨어에서 요청 분석 응답 마무리

: HTTP 메소드 별 미들웨어 설정 가능

: 여러 미들웨어를 거쳐서 요청과 응답 마무리

> app.use(function(req,res,next){
>     console.log("");
> next();                    // 바로 밑에 있는 미들웨어 실행
> });

> app.use(logger, sayHello) 와 같이 두 함수를 같이 넣어도 됨.

: express의 미들웨어

: 애플리케이션 수준의 미들웨어

: 라우터 수준의 미들웨어

: 에러처리

: 빌트인

: 써드파티

: 미들웨어 동작 순서 중요

: 보통 미들웨어 동작 순서

: 파비콘 처리 미들웨어

: 로깅 - 로그 남기는 거

: 정적파일

: 서비스 미들웨어

: 에러처리

: 내장 미들웨어, 써드 파티 미들웨어

: 내장 미들웨어

: express.static

: 써드 파티 미들웨어 : 설치해야 사용 가능

: var cookieParser = require('cookie-parser');

: app.use(cookeParser());

3. 정적 파일 요청 처리 미들웨어

정적파일

: 정적 파일 처리 미들웨어

: express.static

: 미들웨어 생성

: express.static(root, [options])

: 옵션

: etag : etag 사용 여부, 기본 true

: 사용

: app.use(express.static('images'))  //  images 폴더에서 찾아라

: 여러개 사용 가능

: 첫번째 미들웨어에서 서비스 실패하면, 그 다음 미들웨어에서 찾음

: 가상 경로 설정

: app.use('/static',express.static('files'));    //    static/image.png를 files/image.png로 찾음

Express 라우팅

1. Expresss 라우팅

라우팅

: 클라이언트의 요청을 미들웨어로 분배

: 라우팅 종류

: 요청경로

: 요청 메소드

: 요청 경로 + 요청 메소드

메소드별 라우팅 함수

: app.all, get, post, put, delete(요청경로, 담당 미들웨어)

동적 파라미터

: app.get('/user/:item',[callback]);

: req.params.item 처럼 호출

: 다수의 파라미터 사용 가능

: /movies/:movieId/:actor

: 사용 주의

: /user/:item

: /user/sample

: 라우팅 경로가 겹친다

: 앞 순위 미들웨어가 담당

: 순위 조절 필요

라우팅

: 경로에 정규식 사용하기

: ? 문자 존재하거나 생략

: /ab?cd ==> /abcd, /acd

: + 1번이상 반복

: /ab+cd ==> /abcd, /abbcd, /abbbcd

: * 임의의 문자

: /ab*cd ==> /abcd, abxcd, abRABDOMcd, ...

: 괄호를 통해 묶어주면 정규식을 묶어서 사용 가능

: express의 route 함수

: 같은 경로에 대해 다양한 메소드를 정의할 수 있음

: route().get().post()..

라우터 수준의 미들웨어

라우터

> var router = express.Router();

: 라우팅 로직을 별도로 분리할 떄 사용

: router.js

> router.get(경로,미들웨어);

> router.get(경로,미들웨어);

> module.exports = router;

: 라우팅 로직 설정 

: app.js

: app.use(require('./router'))

상대 경로 처리 라우터 설정

상대 경로 요청 처리 가능

* /greeting/hello 경로의 요청

: app.use('/greeting',require('./greetingRouter'))

* greetingRouter의 라우팅 코드

: router.get('/hello', sayHello);    //    상대적으로 적힘

2. 에러처리 미들웨어

Express 에러 처리 방법

: 미들웨어 내부에서 처리

: 각각 미들웨어에서 에러 처리

: 에러 처리 로직이 제각각

: 에러 처리 코드 중복

: 에러 처리 미들웨어에게 위임

: 일관된 에러 처리 가능

: 가장 후순위로 설정해야함.

환경 별 에러 처리

: 개발환경 설정하기

: // Windows - 서비스 환경

: set NODE_ENV = product        //    node myapp.js

//LINUX - 개발환경

: NODE_ENV = product node myapp.js

: NODE_ENV = development node myapp.js

: 환경설정 읽기

: app.get('env')

Express 써드파티 미들웨어

1. 파비콘 미들웨어

파비콘 미들웨어

: 파비콘 담당 미들웨어

: serve-favicon

: 웹브라우저의 싸이트 아이콘

> npm install serve-favicon

: 미들웨어 생성

: favicon(파비콘경로, 옵션)

: 미들웨어 중 앞 순위로 설정

> var express = require('express')
> var favicon = require('serve-favicon')
> var app = express()
> app.use(favicon(__dirname + '/public/favicon.ico'));

2. 로그 남기기

로그 남기기

: 로그

: 개발용, 버그 분석

: 사용자 행위 기록

: 운영 기록

: 로그 기록 매체

: 콘솔에 출력

: 파일, 데이터 베이스에 기록

: 이메일, SMS 등....

로그 남기기 - console

: console.info, log, warn, error ()

로그 미들 웨어 - morgan

: 로그 모듈 : morgan

: 간단한 설정

: 요청과 응답을 자동으로 로그 남기기

: morgan 설정

: morgan(format, options)

: 로그 포멧

: combined

: common : addr, ,user, method, url,...

: 사용 예

> var morgan = require('morgan')

> app.use(morgan('dev'))

: 요청과 응답 자동으로 기록

: 미들웨어 중 앞 순위로 설정

로그 미들웨어, 모듈 : winston

: 다양한 형태로 로그 남기기

: 모건 보다 다양한 형태로 남길 수 있음

: 파일로 남기기, 데이터 베이스에 저장

: email, sms, 알림 서비스 사용

: 서비스 운영 시 콘솔을 항상 볼 수 없기 때문에 필요함.

: 로그 기록 매체 : Transport

: 기본제공 Transport

: Console

: File

: Http

: Transport 추가/삭제

: winston.add(winston.transport.File, {filename:'service.log'});

: winston.remove(winston.transports.Console);

: 추가한 방법 모두 출력이 됨.

: 로거를 생성해서 사용자 정의로 만들 수 있음

: 에러났을때나, 사용자 로그를 남기는 등 다양한 상황에 맞추어 다르게 사용가능

: 별도 설치 Transports

: DailyRotateFile = 매일 새로운 파일로 교체하면서 로그를 남기도록 하는거

: CouchDB, Redis, MongoDB ..

: Mail transport

: Notification Service(Amazon SNS)

3. BodyParser

: post 등 버퍼를 통해 입력을 받을때 편하게 요청 메시지 바디를 파싱할 수 있도록 하는 모듈

: 바디메시지 인코딩 타입

: JSON, Raw, Text, URL-Encoded

: 멀티파트 지원안됨

: formidable, multer 등 써드 파티 미들 웨어 사용

: 옵션을 통해 메시지 크기 여러 옵션을 적용가능

: bodyParser.json()

: bodyParser.urlencoded()

바디 파서의 결과

: 파서 결과 - req.body

4. 메소드 오버라이드

메소드 오버라이드

: HTML 폼은 GET과 POST만 가능한데, DELETE와 PUT을 사용할 수 있도록 도와줌


Express 템플릿 엔진

Express 템플릿

HTML 출력

: 클라이언트가 웹 브라우저

: 응답 메시지 형태 - HTML

: 화면 전환

: HTML 구성요소

: 문서 구조 태그, 컨텐츠, CSS, JS

템플릿

: 뷰와 제어코드(데이터) 분리, 결과물 - HTML

템플릿 엔진

: ejs, jade

: Express 템플릿 설정

: app.set('views', 템플릿 폴더)

: app.set('view engine', 템플릿 엔진)

: 템플릿에 적용 : 렌더링

: res.render(파일명, 변수, 콜백)

2. 템플릿 엔진 EJS

템플릿 엔진 EJS

: 특징

: HTML 태그 그대로 사용

: 코드 실행 : <% %>

: 결과 출력 : <%= %>

3. 템플릿 엔진 Jade

Jade

: 특징  

: 간결한 문서 구조 표현

: 들여쓰기를 이용한 문서 구조

: 코드작성은 - 기호를 앞에

: 속성은 () 안에

: = 기호로 변수 출력

: = 기호와 문자열 출력, Escaped

: !=기호와 문자열 출력, Unescaped

: interpolation

: escaped : #{val}

: Unescaped : !{val} 

: if 조건문

: - 없이 사용

: 들여쓰기로 종료








'프로그래밍 > Nodejs' 카테고리의 다른 글

Nodejs와 MongoDB  (0) 2017.04.27
Node.js와 MySQL  (0) 2017.04.27
RESTful  (0) 2017.04.24
모바일서버  (0) 2017.04.24
HTTP POST요청  (0) 2017.04.16

+ Recent posts