본문 바로가기

Framework/Node.js

[Nodejs] 여러 개의 미들웨어 등록하기 - 컴도리돌이

728x90
728x90

미들웨어가 뭐야?

익스프레스(express)에서는 웹 요청과 응답에 관한 정보를 사용해 필요한 처리를 진행할 수 있도록 독립된 함수로 분리한다. 이렇게 분리한 각각의 것들을 미들웨어라고 부른다. 예를 들어, 클라이언트에서 요청했을 때 로그로 남기는 간단한 기능을 함수로 만든 후 use()메소드를 사용해 미들웨어로 등록해 두면, 모든 클라이언트 요청이 이 미들웨어를 거치면서 로그를 남기게 된다.

각각의 미들웨어는 next() 메소드를 호출하여 그다음 미들웨어가 처리할 수 있도록 순서를 넘길 수 있다.

 

클라이언트 요청은 어떻게 처리하지?

라우터는 클라이언트의 요청 패스를 보고 이 요청 정보를 처리할 수 있는 곳으로 기능을 전달해 주는 역할을 한다. 이러한 역할을 흔히 라우팅(routing)이라 부른다.


익스프레스(express) 요청 객체와 응답 객체

메소드 이름 설명
send([body]) 클라이언트에 응답 데이터를 보낸다.
status(code) http 상태 코드를 반환한다.
sendStatus(statusCode) http 상태 코드를 반환한다.
redirect([status,] path) 웹페이지 경로를 강제로 이동한다.
render(view,[,locals][,callback]) 뷰 엔진을 사용해 문서를 만든 후 전송한다.

여러 개의 미들 웨어를 등록하여 사용하기

첫 번째 미들웨어에서는 req 객체에 user 속성을 추가하고 그 값으로 문자열을 하나 넣었다. 이 정보를 사용자 정보라고 하며, 첫 번째 미들웨어에서는 사용자 정보를 설정한 것이다. 만약 클라이언트에 응답을 보낼 때 사용자 정보를 같이 알려주고 싶은데 클라이언트에 응답을 보내는 기능은 두 번째 미들웨어에서 담당한다고 가정하여 코드를 작성하였다. 두 번째 미들웨어에서는 req 객체에 설정된 user 속성을 확인하여 출력하였다.

 

//express 기본 모듈 불러오기
var express = require('express'), http = require('http');

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

app.use(function(req,res,next){
    console.log('첫 번째 미들웨어에서 요청을 처리함.');
    req.user = 'mike';
    next();
})

app.use('/',function(req,res,next){
    console.log('두 번째 미들웨어에서 요청을 처리함.');
    res.writeHead('200',{'Content-type' : 'text/html;charset=utf8'});
    res.end('<h1> express 서버에서 ' + req.user + '가 응답한 결과입니다.</h1>');
})

app.set('port',process.env.PORT || 3000); // 기본 포트를 app 객체에 속성을 설정.

http.createServer(app).listen(app.get('port') , function(){
    console.log('익스프레스 서버를 시작 : ' + app.get('port'));
}); //express 서버 시작.

 

<실행 화면>


728x90
728x90