미들웨어 (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에서
우리가 만든 프로퍼티로 접근하여 사용할 수 있다.
'Node.js' 카테고리의 다른 글
Node.js Express 에러처리하기 (0) | 2021.05.23 |
---|---|
Node.js Express 정적인 파일 서비스 (0) | 2021.05.22 |
Node.js 미들웨어 compression 사용법 (0) | 2021.05.20 |
Node.js 미들웨어 body-parser 사용법 (0) | 2021.05.20 |
프레임워크 Express와 route 사용법 (0) | 2021.05.19 |
댓글