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
'Programming > NodeJS' 카테고리의 다른 글
NodeJS 백로그 관리 (0) | 2023.05.15 |
---|---|
Express HTTP 에러 핸들링 (0) | 2023.04.24 |
NodeJS와 메모리 2 - 가상메모리와 힙 / 스택 (0) | 2022.09.12 |
NodeJS와 메모리 1 - V8 엔진 (0) | 2022.09.12 |
NodeJS --inspect (NodeJS 디버깅 / 힙 스냅샷 생성하고 분석 하기) (0) | 2022.09.01 |