본문 바로가기
개발/Node.js

[Node.js] 익스프레스로 웹 서버 만들기 2 - 자주 쓰이는 미들웨어

by 윤호 2021. 1. 15.

익스프레스로 웹 서버 만들기 1에서 미들웨어를 사용해 보았고, 미리 만들어진 미들웨어를 사용하여 서버의 기능 구현을 쉽게 할 수 있다고 했습니다. 이번 글에서는 그러한 미들웨어들을 알아보겠습니다.

목차

  • static 미들웨어
  • body-parser 미들웨어
  • router 미들웨어
  • cookie-parser 미들웨어
  • express-session 미들웨어

static 미들웨어

static 미들웨어는 서버에있는 특정 폴더의 파일들을 특정 패스로 접근할 수 있도록 만들어 줍니다.

 

% npm install serve-static --save 명령어로 해당 모듈을 설치합니다.

 

다음은 path로 같은 경로에있는 public 폴더에 접근할 수 있도록 하는 예제입니다

var express = require('express');
var path = require('path');

// static 미들웨어 불러오기
static = require('serve-static');

// 익스프레스 객체 생성
var app = express();

// path로 public 폴더에 접근할 수있도록 static 미들웨어 등록
app.use('/public', static(path.join(__dirname, 'public')));

웹 서버의 주소에 path를 추가하여 설정한 폴더에 접근할 수 있습니다.

public 폴더에 있는 login.html에 접근

 

미들웨어 사용 방법은 다음과 같습니다.

app.use('path', static(path.join(__dirname, '폴더 경로')));

 

body-parser 미들웨어

클라이언트와 서버가 데이터를 주고받는 방식에는 GET과 POST가 있습니다.  GET은 주조 문자열에 데이터를 넣는 방식입니다. POST는 html의 body 영역에 있는 데이터를 넣는 방식입니다. (용어의 정의가 어려워 제가 이해하고 있는대로만 적었습니다.)

 

body-pasrer 미들웨어는 POST 방식으로 전달된 데이터를 참조할 수 있게해줍니다.

 

% npm install body-parser --save 명령어로 해당 모듈을 설치합니다.

 

applapplication/x-www-form-urlencoded 형식과 application/json 형식으로 전달된 요청 파라미터를 파싱할 수 있게 합니다.

var express = require('express');

// body-parser 미들웨어 불러오기
var bodyParser = require('body-parser')

// 익스프레스 객체 생성
var app = express();

// body-parser 미들웨어 등록
app.use(bodyParser.urlencoded({extended: false}));

// body-parser 미들웨어 등록
app.use(bodyParser.json());

다음과 같은 방법으로 요청 파라미터를 참조할 수 있습니다.

req.body.속성이름

router 미들웨어

익스프레스의 기본 모듈인 router 미들웨어를 사용해 라우팅을 할 수도 있습니다.

 

다음은 /process/login 패스에 post 방식으로 요청했을 때 처리하는 라우팅 함수를 등록하는 예제입니다.

var express = require('express');

// router 객체 생성
var router = express.Router();

// 라우팅 함수 등록
router.route('/process/login').post(function(req, res){
    console.log('/process/login 처리함');
});

// router 미들웨어 등록
app.use(router);

 

다음과 같은 방법으로 라우팅 함수를 등록할 수 있습니다. post 말고도 get, put, delete 방식의 요청을 처리할 수 있으며, all 메소드는 모든 요청 방식에 대해 처리합니다.

router(요청패스).get( 실행될 함수);
router(요청패스).post( 실행될 함수);
router(요청패스).put( 실행될 함수);
router(요청패스).delete( 실행될 함수);
router(요청패스).all( 실행될 함수);

cookie-parser 미들웨어

cookie-parser 미들웨어를 사용해 쿠키를 저장할 수 있습니다. 쿠키는 클라이언트 웹 브라우저에 저장되는 정보입니다.

 

% npm install cookie-parser --save 명령어로 해당 모듈을 설치합니다.

 

다음과 같은 방법으로 cook-parser 미들웨어를 등록합니다.

var express = require('express');

// cookie-parser 미들웨어 불러오기
var cookieParser = require('cooke-parser');

// cookie-parser 미들웨어 등록
app.user(cookieParser());

 

다음과 같은 방법으로 응답을 보낼 때 쿠키를 저장할 수 있습니다.

res.cookie('user', {
    id: 'jjang01'
    name: '짱구',
    authorized: true
});

 

저장된 쿠키는 다음과 같이 요청 파라미터를 참조하여 확인할 수 있습니다.

req.cookies

express-session 미들웨어

cookie-parser 미들웨어를 사용해 쿠키를 저장할 수 있습니다. 세션은 웹 서버에 저장되는 정보입니다.

 

% npm install express-session --save 명령어로 해당 모듈을 설치합니다.

 

다음과 같은 방법으로 express-session 미들웨어를 등록합니다.

var express = require('express');

// Session 미들웨어 불러오기
var expressSession = require('express-session');

// 세션 설정 및 세션 미들웨어 등록
app.use(expressSession({
	secret:'my key',
	resave:true,
	saveUninitialized:true
}));

 

다음과 같이 응답을 보낼때 세션에 user 속성을 저장할 수 있습니다.

req.session.user = {
    id: 'jjang01',
    name: '짱구',
    authourized: true
};

 

저장된 세션는 다음과 같이 요청 파라미터에 세션 이름을 참조하여 확인할 수 있습니다.

req.session.user

 

 세션의 destroy 메소드로 세션을 삭제할 수 있습니다.

req.session.destroy();

 

다만 이렇게 하면 세션의 모든 속성이 지워지는데, 개별 속성을 삭제하는 방법이 없나 해서 검색해 봤습니다.

delete req.session.속성 으로 개별 속성을 삭제할 수 있다는데 잘 되지 않았습니다..

stackoverrun.com/ko/q/10286420 관련링크입니다.

 

Reference

  • Do it! Node.js 프로그래밍

댓글