<Express.js> Middleware란?

김민석·2021년 1월 3일
0

YouTube clone

목록 보기
5/54

middleware란?

express에는 middleware라는 개념이 있는데요. 유저와 최종 응답사이에 존재하는 함수 또는 과정이라고 정의해보겠습니다. 더 큰 의미로 보면 최종 응답도 middleware라고 할 수 있습니다.

아래 코드를 살펴봅시다. 참고

import express from 'express';

const app = express();

const handleHome = (req, res)=>{
  res.send("Hello from home");
}

app.get('/', handleHome);

사용자가 '/'로 접속하면 handleHome을 실행하게 되죠. handelHome을 실행하기전에 함수를 추가할 수 있는데요. 이 함수가 바로 middleware입니다.

middleware 추가

import express from 'express';

const app = express();

const handleHome = (req, res)=>{
  res.send("Hello from home");
}
const between = () => console.log("Im between");

app.get('/', between, handleHome);

between이라는 middleware를 정의하고 추가한 코드입니다. 그런데 사용자가 '/'에 접속하면 어떻게 될까요? 계속 로딩만 될겁니다. 왜냐하면 between이라는 middleware에서 다음 실행시킬 함수를 호출하지 않았기 때문입니다. 다음 함수를 호출하기 위해선 아래와 같이 between 함수 마지막에 next라는 arguments를 실행해줍니다.

const between = (req, res, next) => {
  	console.log('Im between');
	next();
}

이제 사용자가 '/'에 접속하면 정상적으로 Hello from Home이 출력됩니다.

middleware 사용 예시

특정한 경우에 middleware 단계에서 사용자의 접속을 막을 수도 있습니다. 아래를 봅시다.

const between = (req, res, next) => {
	res.send('block!!!');
}

const handleHome = (req, res) => {
	res.send('hello from home');
}
app.get('/', between, handleHome);

위와 같은 경우에 사용자가 '/'로 접근하려고 하면 화면에 block!!!이라고 하는 안내만 뜰겁니다. next()를 해주지 않아 handleHome함수가 실행되지 못했기 때문입니다.

모든 경로에 middleware를 추가하고 싶다면?


app.use(between);
app.use(between2);

app.get('/', handleHome);
app.get('/profile', handleProfile);

코드에서 우리는 use를 사용하는데요. use는 GET method에 의해서만 호출되는 get과 달리 GET과 POST request 모두에 호출된다는 의미입니다. 순서가 중요하니 유의하세요. middleware를 route보다 위에 적어주어야 해당 route보다 먼저 middleware가 실행되는 겁니다. route아래에 적으면 실행되지 않습니다.

middleware 필요성

middleware는 서비스 제공자의 편의성을 위해서 존재합니다. 또한 꼭 한개가 아니라 원하는 만큼 여러개를 추가할 수도 있습니다. 아래는 middleware의 일반적인 사용 용도입니다.

  • 로그인 여부 체크
  • 파일 전송 중간에 실제 파일 upload
  • 접속에 대한 로그 작성
  • IP주소를 체크하고 접속 여부 결정
profile
누구나 실수 할 수 있다고 생각합니다. 다만 저는 같은 실수를 반복하는 사람이 되고 싶지 않습니다. 같은 실수를 반복하지 않기 위해 기록하여 기억합니다.🙃

0개의 댓글