- Node.js로 서버 개발시 쉽게 서버를 구성할 수 있게 편리한 기능을 제공하는 웹 서버 프레임워크
- Node.js의 핵심 모듈인 http와 connect 컴포넌트(미들웨어)를 기반
- 개발자는 Express가 제공하는 미들웨어 중 필요한 것만 선택하여 서버 구현
- Express를 통해 서버 개발시 코드가 간결해지고 가독성이 높아져 직관적으로 이해 가능
- Node.js의 HTTP 모듈 없이 간단한 서버 구현 가능
- 편의성, 가독성 증가
- 강력한 미들웨어 지원
- 라우팅을 깔끔하게 관리 가능
- 클라이언트의 API 요청이 들어왔을 때부터 서버가 응답을 내보내기 까지 여러 함수들을 거지게 되는데 그 함수 중 하나가 미들웨어
- 요청과 응답을 조작하여 기능을 추가하거나 예외처리 등을 수행하는 Express 동작 방식의 핵심
- 미들웨어에선 다음 기능으로 통과시킬지 말지 결정할 수 있어 여러 기능 실행 전 수행해야 할 기능을 만들 수 있게 된다
- 할 일을 수행한 후 매개변수인 next()를 통해 다음에 위치한 미들웨어 또는 client의 요청 자원 경로(URI)로 이동
- 인증/인가 미들웨어 : Customized된 인증/인가 미들웨어를 인증/인가가 필요한 API에 등록하면, 해당 API 요청이 들어올 경우 미들웨어를 거치게 되어 인증/인가 성공시 API를 실행하고 실패시엔 에러 발생
- Third Party Middleware : 이미 Node.js 패키지에 존재하는 미들웨어로서 app.use(..) 의 명령어로 서버에 적용
- cors() : Cross-Origin-Resource-Sharing의 줄임말로서, 기존 출처가 아닌 다른 출처의 리소스를 요청하고 가져올 수 있는 권한을 부여하도록 브라우저에 알려주는 체제. app.use(cors())를 통해 모든 도메인에서 제한 없이 해당 서버에 요청을 보내고 응답을 받을 수 있게 된다
- express.json() : 클라이언트로부터 요청과 함께 들어오는 Json 형태의 payload를 파싱하는 미들웨어. Request body를 통해 Json 데이터를 받을 수 있게 된다
- morgan() : 클라이언트가 요청한 메서드나 응답 등의 로그를 남겨주는 미들웨어
애플리케이션 엔드포인트 즉 URI 경로를 정의하고 URI가 클라이언트 요청에 응답하는 방법을 결정하는 것
- 라우팅을 쉽게 처리할 수 있도록 Express에서 제공하는 클래스이자 미들웨어
- express.Router()를 통해 생성한 라우터 객체에 여러 라우트들을 담은 뒤 exports해서 모듈화가 가능해졌다
- 유지보수의 편의성과 가독성이 증가
- 하나의 라우트는 express의 인스턴스인 app, HTTP 요청 메서드, 서버에서의 경로인 PATH, 라우트가 일치할 때 실행되는 함수인 Handler로 구성
- ex) app.METHOD(PATH, HANDLER FUNC)
const express = require('express') const app = express() const PORT = 8000 app.get('/', (req, res) => { res.send('Hello World') }) app.listen(PORT, () => { console.log(`Server is listening on PORT ${port}`) })