본문 바로가기
Node.js

Node.js 미들웨어

by 헤이봄봄 2021. 5. 21.
미들웨어 (Middleware)

미들웨어는 Client와 Server를 연결하여 데이터를 주고받을 수 있도록

중간에서 매개 역할을 하는 소프트웨어이다.

 

 

 

 

미들웨어 종류

Application-level

Router-level

Error-handling

Built-in

Third-party

 

 

 

 

😁Application-level

const express = require('express');
const app = express();

 프레임워크 express를 require해서

 실행된 express를 app이라는 변수에 담아서 사용한다.

 

app.use(function (request, response, next) {
  console.log('Middleware');
})

 app에 use, method (get, post, put, delete 등) 로 미들웨어를 등록해서 사용한다.

 use는 어떤 method 로 들어오던지 다 실행을 하겠다는 뜻

 

 미들웨어는 함수다. 함수로 미들웨어를 만들어서 그 함수를 parameter로 주어 전달하는 구조

 

app.use('/', function (request, response, next) {
  console.log('Middleware');
})

 첫번째 parameter로 경로를 지정해주어

 해당 경로로 클라이언트가 접근을 했을때에만 미들웨어가 동작하도록 지정할 수 있다.

 첫번째 parameter에서 경로를 지정하지않을 경우, 모든 경로에서 미들웨어가 동작한다.

 

 미들웨어의 인자는 3개로 구성되어있다.

 (request, response, next)

 요청, 응답, 다음 미들웨어 호출 콜백 next는 미들웨어 최하단에서 실행해줌으로서 다음 미들웨어가 실행되게 해주는 콜백함수이다.

 next를 호출하지않으면, response를 반환하여 클라이언트에게 전달한다.

 

app.use('/',function (request, response, next) {
  console.log('Middleware');
  next()
}, function (request, response, next) {
    console.log('Middleware2');
    next()
})

 미들웨어는 2개이상 연속으로 등록 할 수 있다.

 

 

 

 

😁Router-level

const router = express.Router()

 Router에 인스턴스 바인딩하여 사용한다는 점을 제외하면,

 application 미들웨어와 사용법은 동일하다.

 

 

 

 

😁Error-handling

 오류처리 미들웨어이다.

app.use(function (error,request, response, next) {
  console.error(err.stack);
})

 오류처리 미들웨어는 항상 4개의 인자를 받는다. 

 하나라도 생략되면 일반 미들웨어로 인식해버리므로 4개를 꼭 넣어주어야한다.

 

 

 

 

😁Built-in

 내장 미들웨어이다.

 Express Built-in미들웨어는 말그대로 Express안에 존재하는 미들웨어들을 뜻한다. 

 

 

 

 

😁Third-party

 누군가에 의해 만들어진 미들웨어이다.

 이 말은 즉 우리도 직접 만들수 있다는 뜻이다.

function thirdParty(request, response, next) {
  const middle = "middleware";
  console.log(`${middle} funny!`);

  request.mi = middle;
  next();
}



app.use('/', thirdParty);         //middleware funny!
app.post("/login", (rerequestq, response) => {
  console.log(request.mi);         //middleware
})

thirdParty 미들웨어를 만들어보았다. 

만든 미들웨어는 app.use를 통해 등록하여 실행시킬 수 있다. 

 

사용자가 요청한 request인자에 직접 프로퍼티를 만들어서 데이터를 넣어줄수 있고

그리고 그 데이터는 미들웨어를 타고타고 들어가면서 연결되는 미들웨어들이 호출하는 request에서 

우리가 만든 프로퍼티로 접근하여 사용할 수 있다. 

 

댓글