Express
- Node.js 생태계에서 가장 널리 쓰이는 웹 프레임워크
- 내장하고 있는 기능은 매우 적으나, 미들웨어를 주입하는 방식으로 기능을 확장하는 생태계를 가지고 있음
- 공식 매뉴얼 한국어 번역
Express 앱의 기본 구조
// Express 인스턴스 생성
const app = express()
// 미들웨어 주입
app.use(sessionMiddleware())
app.use(authenticationMiddleware())
// 라우트 핸들러 등록
app.get('/', (request, response) => {
response.send('Hello express!')
})
// 서버 구동
app.listen(3000, () => {
console.log('Example app listening on port 3000!')
})
Routing
// HTTP 요청 메소드(GET, POST, ...)와 같은 이름의 메소드를 사용
app.get('/articles', (req, res) => {
res.send('Hello Routing!')
})
// 특정 경로에만 미들웨어를 주입하는 것도 가능
app.post('/articles', bodyParserMiddleware(), (req, res) => {
database.articles.create(req.body)
.then(() => {
res.send({ok: true})
})
})
// 경로의 특정 부분을 함수의 인자처럼 입력받을 수 있음
app.get('/articles/:id', (req, res) => {
database.articles.find(req.params.id) // `req.params`에 저장됨
.then(article => {
res.send(article)
})
})
Request 객체
- req.body
- 요청 바디를 적절한 형태의 자바스크립트 객체로 변환하여 이곳에 저장 (body-parser 미들웨어에 의해 처리됨)
- req.ip
- 요청한 쪽의 IP
- req.params
- route parameter
- req.query
- query string이 객체로 저장됨
Response 객체
- res.status(...)
- 응답의 상태 코드를 지정하는 메소드
- res.append(...)
- 응답의 헤더를 지정하는 메소드
- res.send(...)
- 응답의 바디를 지정하는 메소드
인자가 텍스트면 text/html, 객체면 application/json 타입으로 응답