320x100
320x100

express

: NodeJS를 위한 개방된 빠르고 간결한 웹 프레임워크 

: NodeJS를 이용하여 쉽게 서버를 구성할 수 있는 클래스와 라이브러리의 집합체

 

 

 

 

express의 구조

- 미들웨어

: HTTP 요청이 들어온 순간 부터 순차적으로 처리하는 시스템

: HTTP 요청과 응답객체에 대한 처리 및 다음 미들웨어를 실행

: HTTP 응답이 마무리 될 때까지 미들웨어 동작 사이클이 실행됨

 

- 라우트 핸들러

: 미들웨어의 한 종류로, 라우팅 함수 (get, post, put, delete 등)를 의미

: 일반적인 미들웨어와는 다르게 path paramater를 사용할 수 있음

 

 

 

 

애플리케이션 미들웨어

app.use((req, res, next) => {
  console.log(`Request ${req.path}`);
  next(); // 1
});
 
app.use(auth); // 2
 
app.get("/", (req, res, next) => {
  res.send("Hello Express"); // 3
});

: use나 http method 함수를 사용하여 미들웨어를 연결

: 미들웨어를 모든 요청에 공통적으로 적용

: http 요청이 들어온 순간부터 적용된 순서대로 동작

 

 

 

 

라우터 미들웨어

router.use(auth); // 3
 
router.get("/", (req, res, next) => {
  res.send("Hello Router");
}); // 4
 
//-----------------------------------------
app.use((req, res, next) => {
  console.log(`Request ${req.path}`);
  next(); // 1
});
 
app.use("/admin", router); // 2

: router 객체에 미들웨어가 적용되는 것 외에는 애플리케이션 미들웨어와 사용방법이 동일

: 특정 경로의 라우팅에만 미들웨어를 적용하기 위한 방법

: app 객체에 라우터가 적용된 이후로 순서대로 동작

 

 

 

 

 

미들웨어 서브스택

app.use(middleware1, middlware2, ...);
 
app.use("/admin", auth, adminRouter);
 
app.get("/", logger, (req, res, next) => {
  res.send("Hello Express");
});

: 여러 개의 미들웨어를 동시에 적용

: 주로 한 개의 경로에 특정해서 미들웨어를 적용하기 위해 사용

: 전달된 인자의 순으로 동작

 

 

 

 

오류처리 미들웨어

app.use((req, res, next) => {
  if (!isAdmin(req)) {
    next(new Error("Not Authorized")); // 1 중간은 건너뛰고 마지막 오류처리 미들웨어로 실행된다.
    return;
  }
  next();
});
 
app.get("/", (req, res, next) => {
  res.send("Hello Express");
});
 
app.use((err, req, res, next) => { // 2, err 인자
  res.send("Error Occurred");
});

: 가장 아래 err, req, res, next를 인자로 가지는 함수가 오류처리 미들웨어

: 이전에 적용된 미들웨어중 next에 인자를 넘기는 경우 중간 미들웨어들을 뛰어넘고 오류처리 미들웨어가 실행됨

 

 

 

 

 

함수형 미들웨어

const auth = (memberType) => {
  return (req, res, next) => { // 미들웨어 함수 리턴
    if (!checkMember(req, memberType)) {
      next(new Error(`member not ${memberType}`));
      return;
    }
    next();
  };
};
 
app.use("/admin", auth("admin"), adminRouter);
 
app.use("/users", auth("member"), userRouter);

: auth 함수 실행 시 미들웨어의 동작이 결정되는 방식

: 일반적으로 동일한 로직에 설정값만 다르게 미들웨어를 사용하고 싶을 경우에 활용됨

 

 

 

 

 

app.use와 app.get의 차이

- app.use()

: 미들웨어를 애플리케이션에 바인딩

: 주어진 URL의 모든 요청에서 실행

: URL이 지정된 경로로 시작하는지 여부만 확인 가능

 

- app.get()

: Express의 응용 프로그램 라우팅의 일부

: GET 요청 시 특정 경로를 일치시키고 처리하기 위함

: 주어진 URL의 GET 요청에서 실행

// /book 으로 시작하는 모든 요청에 대해 매치
app.use('/book', handler);  

// 정확히 일치하는 GET 요청에 대해서만 매치
app.get('/book');

 

 

 

 

 

 

 

 

Reference

 

[JAVASCRIPT] express란?

하루에 두 번의 포스팅이라니😊. 오늘은 express에 대해 알아보도록 하자. 1. Express란? express 사이트(https://expressjs.com)에 가보면, express란 'Node.js를 위한 빠르고 개방적인 간결한 웹 프레임워크' 라

velog.io

 

[Node.js] Node.js Middleware란?

🎯 Node.js Middleware란? 미들웨어는 Express.js 동작의 핵심이다. HTTP 요청과 응답 사이에서 단계별 동작을 수행해주는 함수이다. 📝 미들웨어 동작 원리 Express.js의 미들웨어는 HTTP 요청이 들어온 순

lakelouise.tistory.com

 

[node.js] express.js에서 app.use와 app.get의 차이점 - 리뷰나라

나는 표현과 node.js를 처음 접했고 app.use와 app.get의 차이점을 알 수 없습니다. 둘 다 사용하여 정보를 보낼 수있는 것 같습니다. 예를 들면 다음과 같습니다. app.use('/',function(req, res,next) { res.send('He

daplus.net

300x250
728x90