반응형
Middleware란 Request와 Response의 중간에 위치하며 여러 가지 행위(Request 및 Response 조작, Request Drop)를 할 수 있습니다.
Node.js에서는 여러 가지 방법이 있을 수 있지만, app.use를 이용한 기본적인 방법에 대하여 포스팅 하도록 하겠습니다.
예제 환경 구성하기
1. 저는 NestJS(Node.js 기반)를 이용하여 예제 환경을 구성하였는데요. 아래의 명령어를 통하여 설치 가능합니다.
$ npm i -g @nestjs/cli
$ nest new project-name
2. 소스 코드 수정 후 아래의 명령어를 이용하여 애플리케이션을 실행할 수 있습니다.
$ npm run start
Middleware (미들웨어)
Node.js에서 Middleware는 app.use를 이용하여 매우 간편하게 구현할 수 있습니다.
(.get의 경우 다른 HTTP Method로 대체될 수 있음)
- app.use(Middleware)
- app.use(Path, Middleware)
- app.get(Middleware)
- app.get(Path, Middleware)
main.ts
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.use((req, res, next)=>{
console.log("1");
next();
})
}
bootstrap();
그리고 각각의 사용 방법에 따라 Middleware가 실행되는 조건이 달라집니다.
구분 | 설명 |
app.use(Middleware) | 모든 요청에 대하여 Middleware 실행 |
app.use(Path, Middleware) | Path 경로로 전송된 모든 요청에 대하여 Middleware 실행 |
app.get(Middleware) | GET Method로 전송된 모든 요청에 대하여 Middleware 실행 |
app.get(Path, Middleware) | GET Method를 이용하여 Path 경로로 전송된 모든 요청에 대하여 Middleware 실행 |
만약 아래와 같이 동일한 경로 또는 방법으로 사용된 Middleware가 존재한다면, 상단에 있는 Middleware가 먼저 실행되고 하단에 있는 Middleware가 나중에 실행됩니다.
main.ts
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.use((req, res, next)=>{
console.log("1");
next();
})
app.use((req, res, next)=>{
console.log("2")
next()
})
}
bootstrap();
/*
Request : GET /
Console :
1
2
*/
그리고 next의 호출 여부에 따라 다음 Middleware 실행 여부가 결정됩니다. 아래 코드는 "/" 경로에 대한 Middleware에서 next() 함수를 호출하고 있지 않아 "GET /222"로 접근 시 Console.log에 /222가 찍히지 않습니다.
main.ts
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.use((req, res, next)=>{
console.log("1");
next()
})
app.use((req, res, next)=>{
console.log("2")
next()
})
app.use("/",(req, res, next)=>{
console.log("/")
})
app.use("/123",(req, res, next)=>{
console.log("/123")
next()
})
app.use("/222",(req, res, next)=>{
console.log("/222")
next()
})
await app.listen(3000);
}
bootstrap();
/*
Request : GET /222
Console :
1
2
/
*/
'Study > WEB' 카테고리의 다른 글
TypeScript 문법 정리 (0) | 2022.10.14 |
---|---|
AngularJS 시작하기 - HTTP 통신을 통한 Data 전달받기 (3/3) (0) | 2022.10.10 |
AngularJS 시작하기 - 웹 서버 개발 기초 (2/3) (0) | 2022.10.10 |
AngularJS 시작하기 - 환경 구성 (1/3) (0) | 2022.10.09 |
AngularJS에 대하여 알아보자 (0) | 2022.10.09 |
댓글