$mkdir my-web
$cd my-web
$npm init
$npm i express
---
const express = require('express')
const app = express()
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000);
$npm i -g express-generator
$express my-web
$cd my-web
$npm i
$npm start
$npx express-generator my-web
$cd my-web
$npm i
$npm start
| 구조 | 의미 | |
|---|---|---|
| app.js | Express.js 의 가장 기본이 되는 파일, 웹 어플리케이션의 기능을 정의 | |
| bin/www | Express.js 실행 부분을 담당, 포트와 실행 오류 등을 정의 | |
| my-web | package.json | 프로젝트 의존성 및 스크립트 정의 |
| public | 코드를 통하지 않고, 직접 제공되는 파일 디렉터리 | |
| routes | 라우팅 파일 디렉터리 | |
| views | HTML Template 디렉터리 |
// app.js
var express = require('express');
...
var app = express();
app 객체를 확인할 수 있음app 객체 주요 기능
- app.use() : middleware 를 사용하기 위한 함수
- app.listen() : http 서버를 생성해주는 함수. express-generator 를 사용하면 http.createServer를 사용하는데 app.listen 함수로 대체할 수 있음
- app.locals : app에서 사용할 공통 상수. Express.js 에선 global 변수를 선언하지 않고 이 값을 사용할 수 있음
1) app 라우팅
app.get('/', (req, res) => {
res.send('GET /');
});
app.post('/', (req, res) => {
res.send('POST /');
});
app.put('/', (req, res) => {
res.send('PUT /');
});
app.delete('/', (req, res) => {
res.send('DELETE /');
});
app.all('/all', (req, res) => {
res.send('ANY /');
});
2) Express.Router
✔ app 라우팅을 통해서는 라우팅의 핵심인 그룹화를 지원하지 않음. Express.Router 를 통해 라우팅을 모듈화 할 수 있음
// Express.Router 모듈
const express = require('express');
const router = express.Router();
router.get('/', (req, res, next) => {
res.send('respond with a resource');
});
module.exports = router;
// Express.Router 사용
// ./app.js
const userRouter = require('./routes/users');
const app = express();
app.use('/users', userRouter); // 작성된 라우터 모듈을 app 에 use함수로 연결하여 사용할 수 있음
// ./routes/users.js
const petRouter = require('./pets');
const router = express.Router();
router.use('/pets', petRouter); // router 객체에도 하위 라우터를 use 함수로 연결하여 사용할 수 있음
module.exports = router;
라우팅 - path parameter 사용
router.get('/:id', (req, res) => { // router나 app의 HTTP method 함수의 가장 마지막 인자로 전달되는 함수
const id = req.params.id // 설정된 라우팅 경로에 해당하는 요청이 들어오면 Request Handler 함수가 실행됨
res.send(`hello ${id}`); // 요청을 확인하고, 응답을 보내는 역할을 함
});
Request 객체의 주요 값 및 함수
HTTP 요청 정보를 가진 객체
1) req.params : URL 표현 중 /path/:id 에서 :id 를 req.params.id 로 사용할 수 있음
2) req.queries : URL 표현 중 /path?page=2 에서 page 부분을 req.queries.page 로 사용할 수 있음
3) req.body : 일반적으로 POST 요청의 요청 데이터를 담고 있음. req.body 에 요청 데이터가 저장되어 들어옴
4) req.get('') : HTTP Request 의 헤더 값을 가져올 수 있음. req.get('Authorization') 등으로 값을 가져옴
Response 객체의 주요 값 및 함수
HTTP 응답을 처리하는 객체
1) res.send() : text 형식의 HTTP 응답을 전송함
2) res.json() : json 형식의 HTTP 응답을 전송함
3) res.render() : HTML Template 을 사용하여 화면을 전송함
4) res.set() : HTTP 응답의 헤더를 설정함
5) res.status() : HTTP 응답의 상태 값을 설정함