Post

Node.js-express(2)

미들웨어란?

미들웨어란 요청과 응답 사이에서 이들 사이를 조율하는 함수라고 생각하면 됩니다. 이렇게 들으면 추상적으로 들릴텐데, 요청과 응답 사이 중간 단계라고 생각하시면 편합니다. app.use(middleware); //요청의 타입에 관계없이 middleware를 수행합니다. app.use(‘/routingRoute’, middleware); // ‘/routingRoute’ 요청의 타입과 관계없이 경로의 요청에 대해서 middleware를 수행합니다. app.post(‘/Hi’, middleware); // ‘Hi’ 경로의 post 요청에 대해서 middleware를 수행합니다.
app.get(‘/Hi’, middleware); // ‘Hi’ 경로의 get 요청에 대해서 middleware를 수행합니다.
형식으로 미들웨어를 사용할 수 있습니다.

또한, app.use, app.get, app.post 내부 미들웨어는 하나만 사용되는 것이 아닌 여러가지 미들웨어를 사용할 수 있습니다. app.use(middleware1, middleware2, middleware3); 형식으로 사용 가능하다는 의미입니다. 이는 순차적으로 middleware1 -> middleware2 -> middleware3 순으로 실행 될 예정입니다.

미들웨어를 단독으로 사용할 수 있지만, 보통은 요청과 응답에 대해 미들웨어를 수행하는게 일반적입니다. 요청과 응답에 대해 req, res, next 3개의 매개변수를 갖는데, req는 request의 의미를 지닙니다. 이는 클라이언트에서 서버로 전송된 데이터를 포함합니다. res는 response의 의미를 지닙니다. 이는 서버에서 클라이언트로 전송할 데이터 및 정보를 관리합니다. next는 다음 미들웨어를 수행하는 함수로, 서버측의 함수 호출 스택에 존재하는 다음 미들웨어 함수를 호출합니다. 만약 next를 실행하지 않으면, 다음 미들웨어로 넘어가기 직전 상황에서 대기합니다.

1
2
3
4
5
6
7
8
9
10
11
// 첫 번째 미들웨어
app.use((req, res, next) => {
    console.log('1st middleware');
    next(); //다음 미들웨어 호출
});

// 두 번째 미들웨어
app.use((req, res, next) => {
    console.log('2nd middleware');
    res.send('Hello, World!'); // 응답 전송
});

만약 첫 번째 미들웨어에서 next()를 사용하지 않으면, 콘솔에 2nd middleware는 출력되지 않을 것입니다. 이는 두 번째 미들웨어로 넘어가지 않고, 계속 대기한다는 의미입니다.

미들웨어의 사용

미들웨어는 에러를 처리할 때도 사용됩니다. 이 경우 req, res, next 3개의 매개변수가 아닌, err 매개변수까지 포함해서 총 4개의 매개변수를 갖습니다.

1
2
3
4
app.use((err,req,res,next)=>{
    console.error(err); //console에 error를 출력합니다.
    res.status(500).send(err.message); //500번 오류(보통 서버 오류입니다.)를 error 메시지와 함께 client에 전달합니다.
});
This post is licensed under CC BY 4.0 by the author.