본문 바로가기
Web/Node.js

express moduler

by juein 2018. 3. 7.

[express 모듈과 함께 사용할 수 있는 미들웨어]


router : 페이지 라우트를 수행

static : 특정 폴더를 서버의 루트 폴더에 올림

morgan : 로그 정보를 출력

cookie parser : 쿠키 해석

body parser : post 요청 매개변수를 추출

connect-multiparty : post 요청 매개변수 추출

express-session : 세션 처리를 수행

csurf : CSRF보안을 수행

error handler : 예외 처리를 수행

limit : post 요청 데이터를 제한

vhost : 가상 호스트 설정




[router 미들웨어]

http 모듈을 사용하여 페이지 라우팅을 할 때

//pathname 변수 선언
var pathname = url.parse(req.url).pathname;

//페이지 구분
if( pathname == '/' ){

}else if( pathname == '/board' ){

}

http 모듈을 사용했을 때, 위 코드처럼 if조건문으로 페이지 라우팅을 구현했었지만

router 미들웨어를 사용하면 페이지 라우팅을 쉽게 구현할 수 있다.


router 미들웨어는 app 객체의 메서드를 사용할 수 있다.


app 객체의 메서드

get( path, callback[, callback ...] ) : GET 요청이 발생했을때의 이벤트 리스너를 지정

post( path, callback[, callback ...] ) : POST 요청이 발생했을때의 이벤트 리스너를 지정

put( path, callback[, callback ...] ) : PUT 요청이 발생했을때의 이벤트 리스너를 지정

delete( path, callback[, callback ...] ) : DELETE 요청이 발생했을때의 이벤트 리스너를 지정

all( path, callback[, callback ...] ) : 모든 요청이 발생했을때의 이벤트 리스너를 지정



router 미들웨어를 사용하여  페이지를 라우팅

//라우터 설정
app.get('/board', function(req, res){
    res.send('<p>board page</p>');
});

//라우터 설정 및 매개변수 추출
// params 속성 : /:num 처럼 : 기호를 사용해 지정된 라우팅 매개변수
// query : ?test=1  같은 요청 매개변수
app.get('/page/:num', function(req, res){

    var num = req.params.num;

    //http://127.0.0.1/page/123 으로 접속시  '123 page' 출력
    res.send('

'+ num +' page

'); });



[static 미들웨어]

웹서버에서 정적 파일을 제공해 주는 미들웨어로, static 미들웨어를 사용하면

지정한 폴더에 있는 내용을 웹 서버 루트 폴더에 올린다.


static 미들웨어를 사용한 이미지 표기

//미들웨어 설정
app.use(express.static(__dirname + '/img'));  // __dirname : 디렉토리 이름을 알아내는 전역변수

app.use(function(req, res){
    res.writeHead(200, {
        'Content-Type' : 'text/html'
    });
    res.end('<<mg src="/test_img.png" alt="test image">');
});



[morgan 미들웨어]

웹 요청이 들어왔을때 로그를 출력해주는 미들웨어로, router나 static 모듈과는 다르게 따로 설치를 해주어야 한다.


morgan 모듈 설치

npm install morgan


morgan 미들웨어 사용

//모듈 추출
var morgan = require('morgan');

//미들웨어 설정
app.use(morgan('combined')); // <-- morgan의 기본형식으로 combined 외에 common, dev, short, tiny 등이 있다.
app.use(function(req, res){
    res.send('<p>test morgan~~ </p>');
});



[cookie parser] 미들웨어

요청 온 쿠키를 추출하는 미들웨어로, cookie parser 미들웨어를 사용하면

request, response 객체에 cookie속성과 cookie() 메서드가 부여된다.

cookie parser도 외부 모듈이므로 별도로 설치를 해줘야 한다


cookie parser 모듈 설치

npm install cookie-parser


cookie() 메서드의 옵션

httpOnly : 클라이언트의 쿠키 접근 권한을 지정

secure : secure 속성을 지정

expires : expires 속성을 지정

maxAge : expire 속성을 상대값으로 지정

path : path 속성 지정


쿠키 생성 및 읽기

//모듈 추출
var cookieParser = require('cookie-parser');

//미들웨어 설정
app.use(cookieParser());

//라우터 설정
app.get('/read_cookie', function(req, res){
    //쿠키 읽기
    res.send(req.cookie);
});

//쿠리 생성
app.get('/set_cookie', function(){
    res.cookie('string', 'cookie');
    res.cookie('json', {
        name : 'cookie',
        property : '1234'
    });

    //쿠키 생성 후 쿠키를 읽는 read_cookie 페이지로 이동
    res.redirect('/read_cookie');
});



[body parser 미들웨어]

POST 요청 데이터를 가져오는 미들웨어. body parser 모듈도 외부 모듈이므로 별도의 설치가 필요하다.


body parser 모듈 설치

npm install body-parser


body parser의 테스트로 post로 넘긴 값을 출력


HTML 파일

<form method="post">
      <input type="text" name="test_text" />
      <input type="submit" name="test_btn">
</form>

서버 기본설정

//모듈 추출
var fs = require('fs'); 
var express = require('express');
var bodyParser = require('body-parser');

//서버 생성
var app = express();

var hostname = 'localhost'; 
var port = 3000; 

//미들 웨어 설정
//'application/x-www-form-urlencoded' 파싱 
//(파일 전송을 위한 multipart/form-data 인코딩은) 나중에 multipart 미들웨어를 사용.
app.use(bodtParser.urlencoded({
    extended : false
}));

//application/json 파싱
app.use(bodyParser.json());

//라우터 설정
app.use('/test_page', function(req, res){

    //post 값 읽기
    var test_text = req.body.test_text;

    //출력
    res.writeHead('200', {
        'Content-type' : 'text/html'
    })
    res.write('

test_text : '+ test_text +'

'); res.end(); }); //서버 실행 app.listen(port, function(){ console.log('Server running at http://'+hostname+':'+port); });



[connect-multiparty 미들웨어]

일반적인 데이터 전송은 'application/x-www-form-urlencoded' 인코드 방식을 사용하지만

파일 업로드 같이 용량이 큰 파일 전송은 'multipart/form-data' 인코딩 방식을 사용하는데, 

이 인코딩 방식을 사용할 수 있게 해주는 미들웨어가  connect-multiparty 미들웨어다.


connect-multiparty 모듈 설치

npm install connect-multiparty


connect-multiparty 미들웨어를 사용한 이미지파일 업로드 구현


html 파일

<form method="post" enctype="multipart/form-data">  <!-- 반드시 enctype 속성을 multipart/form-data 로 지정 -->
    <pgt;이미지파일 업로드</p>
    <input type="file" name="file_upload" />
    <input type="submit" />
</form>

서버 설정

//모듈 추출
var fs = require('fs');
var express = require('express');
var multipart = require('connect-multiparty');

var hostname = 'localhost'; 
var port = 3000; 

//서버 생성
var app = express();

//미들웨어 설정
app.use(multipart({
    uploadDir : __dirname + '/multipart'
}));

//라우터 설정
app.get('/', function(req, res){
    fs..readFile('htmlpage.html', function(error, data){
        res.send(data.toString());
    });
})

//파일업로드 시 request 객체에 files 속성이 추가된다.
app.post('/', function(req, res){

    var file = req.files.image;

    //파일이 있는 경우
    if(file){

        //파일의 이름, 경로, 확장자 변수 설정
        var name = file.name;
        var path = file.path;
        var type = file.type;

        //이미지 파일 확인
        if(type.indexOf('image') != -1){
            //중복된 파일명을 피하기 위해 파일명 변경
            var outputPath = _dirname + '/multipart/' + Date.now() + '_' + name;

            fs.rename(path, outputPath, function(error){
                res.redirect('/');
            });

        //이미지 파일이 아닌 경우 파일 제거
        }else {
            fs.unlink(path, function(error){
                res.sendStatus(400);
            });
        }
        
    //파일이 없을 경우
    }else {
        res.sendStatus(404);
    }

    res.redirect('/');
    
});

//서버 실행
app.listen(post, function(){
    console.log('Server running at http://'+hostname+':'+port);
})



[express-session 미들웨어]

세션 정보를 쉽게 사용할 수 있는 모듈


session 객체의 메서드

regenerate() : 세션을 다시 생성

destory() : 세션을 제거

reload() : 세션 다시 불러오기

save() : 세션을 저장


express-session 설치

npm install express-session


session 미들웨어

//미들웨어 설정
app.use(session({
    secret : 'test key',         // <-- 비밀 키를 저장
    resave : false,              // <-- 세션에 변경되지 않았어도 세션 저장소에 반영할지 설정
    saveUninitialized : true;    // <-- 초기화되지 않은 세션을 세션 저장소에 저장할지 여부 설정
    //store :                    // <--세션 저장소를 지정
    //cookie :                   // <-- 생성할 cookie관련 정보를 지정
    //name :                     // <-- 쿠키의 name 속성을 지정
}));

app.use(function(req, res){
    //세션을 저장
    req.session.now = (new Date()).toUTCString();

    //세션 응답
    res.send(req.session);
})



'Web > Node.js' 카테고리의 다른 글

express 프레임워크  (0) 2018.03.12
mysql module  (0) 2018.03.12
express module - request, response 객체  (0) 2018.03.06
http module (server, request, response, cookie)  (0) 2018.03.02
Node js Email Send  (0) 2018.03.02

댓글