elice/WIL
[week_06] μΉκ³Ό Express.js | μΉμ μ΄ν΄, νλ μμν¬, Express.jsμ ꡬ쑰, λμλ°©μ
건λ§λ
2022. 2. 14. 01:21
1. μΉ
- μ¬μ μ μλ―Έ: World Wide Web, μΈν°λ·μμμ λμνλ λͺ¨λ μλΉμ€
- μΌλ°μ μλ―Έ: μΉ λΈλΌμ°μ λ‘ μ μν΄μ μ΄μ©νλ μλΉμ€, μΉ μ¬μ΄νΈ
1-1. μΉ μλΉμ€ λμ λ°©μ
- HTTP μμ²κ³Ό μλ΅μ λ°λ³΅
- HTTP μμ²
- μ¬μ©μκ° μ΄λ€ λ°μ΄ν°κ° νμνμ§ μλ²μκ² μ리λ μν
- μ΄λ€ μ¬μ©μκ°, μ΄λ€ λ°μ΄ν°λ₯Ό νμλ‘ νλμ§ λ±μ λ΄κ³ μμ
- HTTP μλ΅
- HTTP μμ²μ ν΄λΉνλ μ μ ν λ°μ΄ν°λ₯Ό μ λ¬νλ μν
- μμ²ν λ°μ΄ν°μ, μ΄λ€ λ°μ΄ν°κ° μ μ‘λλμ§ λ±μ λ΄κ³ μμ
1-2. λ°±μλμ νλ‘ νΈμλ
νλ‘ νΈμλ
- μ¬μ©μκ° μ§μ μ¬μ©νκ² λλ μΉ νμ΄μ§λ₯Ό μ£Όλ‘ λ΄λΉ
- = ν΄λΌμ΄μΈνΈ
λ°±μλ
- μ¬μ©μμκ² λ³΄μ΄μ§ μλ λ°μ΄ν° κ°κ³΅ λ±μ κΈ°λ₯μ μ£Όλ‘ λ΄λΉ
- = μλ²
1-3. μ μ μΉκ³Ό λμ μΉ
μ μ μΉ
- μ¬μ©μμ μνΈμμ©νμ§ μλ νμ΄μ§ β‘ λ¨λ°©ν₯ ν΅μ
- Linkλ₯Ό ν΅ν νμ΄μ§ μ΄λ μ λλ§ κ°λ₯
- μΌλ°μ μΌλ‘ λ³νμ§ μλ html νμΌλ‘ μ 곡
λμ μΉ
- μ¬μ©μμ μνΈμμ©μ ν¨ β‘ μλ°©ν₯ ν΅μ
- νλ‘ νΈμλμ λ°±μλκ° μ κΈ°μ μΌλ‘ ν΅μ νλ©° λμ
1-4. λμ μΉμ λ κ°μ§ ꡬν λ°©λ²
2. μΉ νλ μμν¬
- μΉ μλΉμ€μ νμν κΈ°λ₯λ€μ μ 곡ν΄μ£Όλ(Web) λ€μν λꡬλ€μ λͺ¨μ(Framework)
- μ ννλ λΆλΆμ κ°λ¨νκ² κ΅¬ννκ³ , νμν λΆλΆλ§ μ§μ€ν΄μ κ°λ°ν μ μλ€.
2-1. μΉ νλ μμν¬μ κΈ°λ³Έ ꡬμ±μμ
μΉ μλΉμ€μ μ νν λ ꡬμ±μ λ§μ μΉ νλ μμν¬κ° κΈ°λ³Έμ μΌλ‘ μ 곡
1) HTTP μμ²/μλ΅ μ²λ¦¬
- μ΄λ€ λ°μ΄ν°λ₯Ό νμλ‘ νλμ§, μ΄λ€ μ¬μ©μλ‘λΆν° μμ²μ΄ μμ λμλμ§ λ±
- μλ΅ λ°μ΄ν°κ° μ΄λ€ νμμΈμ§, μλ΅ μνκ° μ μμ μΈμ§ λ±
2) λΌμ°ν
- HTTP μμ²μ λΆκΈ°νλ λ°©λ²
- HTTP μμ² URLμ ν΄λΉνλ μλ§μ μλ΅μ κ²½λ‘λ₯Ό 미리 μ€μ
3) HTML Templating
- SSRμ ꡬννκΈ° μν λ°©λ²
- SSRμμ μλ΅μΌλ‘ λ³΄λΌ HTMLμ μλ²μμ μμ±νκΈ° μν΄ HTMLμ λΌλλ₯Ό 미리 μμ±
3. Express.js
3-1. Express.jsλ₯Ό μ¬μ©νλ μ΄μ
- Node.jsμ μΉ νλ μμν¬ μ€ κ°μ₯ μ λͺ ν μΉ νλ μμν¬
- νμμ λ°λΌ μ μ°ν ꡬ쑰 μ€μ κ°λ₯
- λ€μν λ―Έλ€μ¨μ΄λ₯Ό ν΅ν΄ νμν κΈ°λ₯μ κ°λ¨νκ² μΆκ° κ°λ₯
3-2. Express.js μμνκΈ°
- express-generator: νλ‘μ νΈ μμ±κΈ°, νλ‘μ νΈμ κΈ°λ³Έ ꡬ쑰 μλ μμ±
$npm i -g express-generator
$express my-web
$cd my-web
$npm i
$npm start
- npx + express-generatorλ‘ express-generatorλ₯Ό μ€μΉνμ§ μκ³ λ°λ‘ μ¬μ©νλ λ°©λ²
$npx express-generator my-web
$cd my-web
$npm i
$npm start
3-3. Express.jsμ ꡬ쑰
app.js | Express.jsμ κ°μ₯ κΈ°λ³Έμ΄ λλ νμΌ, μΉ μ΄ν리μΌμ΄μ μ κΈ°λ₯μ μ μ |
bin/www | Express.jsμ μ€ν λΆλΆμ λ΄λΉ, ν¬νΈμ μ€ν μ€λ₯ λ±μ μ μ |
package.json | νλ‘μ νΈ μμ‘΄μ± λ° μ€ν¬λ¦½νΈ μ μ |
public | μ½λλ₯Ό ν΅νμ§ μκ³ , μ§μ μ 곡λλ νμΌ λλ ν°λ¦¬ |
routes | λΌμ°ν νμΌ λλ ν°λ¦¬ |
views | HTML Template λλ ν°λ¦¬ |
4. Express.jsμ λμ λ°©μ
express-generator λ‘ λ§λ€μ΄μ§ νλ‘μ νΈ λλ ν°λ¦¬μ μ κ·Ό
npm start λ‘ Express.js νλ‘μ νΈλ₯Ό μ€ν
localhost:3000 μ μ μνμ¬ Welcome to Express νμ΄μ§ νμΈ
4-1. app.js
var express = require('express');
...
var app = express();
- require λͺ¨λλ‘ λ‘λκ° λ expressλ₯Ό ν¨μν λͺ¨λλ‘ μ¬μ©ν΄μ app κ°μ²΄ μμ±
- app κ°μ²΄: Express.jsμ κΈ°λ₯μ λ΄μ κ°μ²΄
- Express.jsμ λͺ¨λ λμμ app κ°μ²΄μ μ μ β‘ expressλ app κ°μ²΄λ‘λΆν° μμν΄μ λͺ¨λ μμ²μ μ²λ¦¬
β¨ app κ°μ²΄μ μ£Όμ κΈ°λ₯
app.use( )
- middlewareλ₯Ό μ¬μ©νκΈ° μν ν¨μ
app.listen( )
- http μλ²λ₯Ό μμ±ν΄μ£Όλ ν¨μ
- express-generatorλ₯Ό μ¬μ©νλ©΄ http.createServerλ₯Ό μ¬μ©νλλ°, app.listen ν¨μλ‘ λ체 κ°λ₯
app.locals
- appμμ μ¬μ©ν κ³΅ν΅ μμ
- Express.jsμμ global λ³μλ₯Ό μ μΈνμ§ μκ³ μ΄ κ° μ¬μ© κ°λ₯
4-2. λΌμ°ν
1) app λΌμ°ν
app.get('/', (req, res) => {
res.send('GET /');
});
app.post('/', (req, res) => {
res.send('POST /');
});
app.all('/all', (req, res) => {
res.send('ANY /');
});
- app κ°μ²΄μ μ§μ get, post, put, delete ν¨μλ₯Ό μ¬μ©νμ¬ HTTP methodλ‘ λΌμ°ν κ°λ₯
- HTTP methodμ 첫 λ²μ§Έ μΈμ = μ΄ λΌμ°ν μ μ€νν URL
- HTTP methodμ λ§μ§λ§ μΈμ = μ΄ λΌμ°ν μ΄ μ€νλ λ μλνλ ν¨μ
- all ν¨μ μ¬μ© μ, HTTP methodμ μκ΄μμ΄ λΌμ°ν κ°λ₯
2) Express.Router
const express = require('express');
const router = express.router();
router.get('/', (req, res, next) => {
res.send('respond with a resource');
});
module.exports = router;
- router κ°μ²΄μλ get, post, put, delete ν¨μ μ¬μ© κ°λ₯
- 첫 λ²μ§Έ μΈμ = λΌμ°ν λ URL
- λ§μ§λ§ μΈμ = λΌμ°ν μ μ€νλ ν¨μ
- λΌμ°ν°λ μΌλ°μ μΌλ‘ λͺ¨λλ‘ λ§λ€μ΄μ μ¬μ©
// .app.js
const userRouter = require('./routes/users');
const app = express();
app.use('/users', userRouter);
// .routes/users.js
const petRouter = require('./pets');
const router = express.Router();
router.use('/pets', petRouter);
module.exports = router;
- μμ±λ λΌμ°ν° λͺ¨λμ app μ use ν¨μλ‘ μ°κ²°νμ¬ μ¬μ© κ°λ₯
- router κ°μ²΄μλ νμ λΌμ°ν°λ₯Ό use ν¨μλ‘ μ°κ²°νμ¬ μ¬μ© κ°λ₯
3) path parameter μ¬μ©
- μ£Όμμ μΌλΆλ₯Ό λ³μμ²λΌ μ¬μ© κ°λ₯
/users/:id β‘ /users/123, /users/456 λ±μΌλ‘ μ μνμ λ λΌμ°ν μ μ©
/messages/:from-:to β‘ /message/123-456 λ±μΌλ‘ μ μνμ λ λΌμ°ν μ μ©
4) Request Handler
- λΌμ°ν μ μ μ©λλ ν¨μ
- HTTP μμ²κ³Ό μλ΅μ λ€λ£° μ μλ ν¨μ
- μ€μ λ λΌμ°ν κ²½λ‘μ ν΄λΉνλ μμ²μ΄ λ€μ΄μ€λ©΄ μ€ν
router.get('/:id', (req, res) => {
const id = req.params.id;
res.send(`hello ${id}`);
});
- routerλ appμ HTTP method ν¨μμ κ°μ₯ λ§μ§λ§ μΈμλ‘ μ λ¬λλ ν¨μ
- Request κ°μ²΄μ Response κ°μ²΄ μ‘΄μ¬
- Request κ°μ²΄μ μ£Όμ κ° λ° ν¨μ
req.params | URL νν μ€ /path/:id μμ :id λ₯Ό req.params.idλ‘ μ¬μ© κ°λ₯ |
req.queries | URL νν μ€ /path?page=2 μμ page λΆλΆμ req.queries.pageλ‘ μ¬μ© κ°λ₯ |
req.body | μΌλ°μ μΌλ‘ POST μμ²μ μμ² λ°μ΄ν°λ₯Ό λ΄κ³ μκ³ , req.bodyμ μμ² λ°μ΄ν°κ° μ μ₯λμ΄ λ€μ΄μ΄ |
req.get('') | HTTP Requestμ ν€λ κ°μ κ°μ Έμ¬ μ μμ, req.get('ν€λλͺ ') |
- Response κ°μ²΄μ μ£Όμ κ° λ° ν¨μ
res.send() | text νμμ HTTP μλ΅ μ μ‘ |
res.json() | json νμμ HTTP μλ΅ μ μ‘ |
res.render() | HTML Templateμ μ¬μ©νμ¬ νλ©΄ μ μ‘ |
res.set() | HTTP μλ΅μ ν€λ μ€μ |
res.status() | HTTP μλ΅μ μν κ° μ€μ |
β¨ Express.js λμλ°©μ μ 리
Express.js λ app κ°μ²΄λ₯Ό μμμΌλ‘ λͺ¨λ λμμ΄ μ΄λ£¨μ΄μ§
app κ°μ²΄λ Express.Router λ₯Ό μ¬μ©νμ¬ λΌμ°ν μ ꡬνν μ μμ
Request Handlerλ₯Ό ν΅ν΄ HTTP μμ²κ³Ό μλ΅μ μ²λ¦¬ν μ μμ