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
'Framework > Node.js' 카테고리의 다른 글
[Nodejs] 우분투에서 MongoDB 사용하기 , VS code에서 mongoDB 사용하기 - 컴도리돌이 (0) | 2021.08.01 |
---|---|
[Nodejs] 익스프레스(express)로 웹 서버 구현 - 컴도리돌이 (0) | 2021.07.30 |
[Nodejs] 서버 실행하기 - 컴도리돌이 (0) | 2021.07.29 |
[Nodejs] 우분투에서 Node.js 환경 만들기 - 컴도리돌이 (0) | 2021.07.28 |