# Express ์์ํ๊ธฐ
# Express Install
์๋ฒ๋ฅผ ์ฝ๊ฒ ์งค ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
npm install express
yarn add express
# Express setting
express ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์๋ฒ๋ฅผ ๋์ฐ๊ธฐ ์ํ ๊ธฐ๋ณธ ์ ํ
server.js;
const express = require('express'); // ์ค์นํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ถ๋ฌ์ค๊ธฐ
const app = express(); // express ์์ํ๊ธฐ
app.listen(8080, function () {
console.log('listening on 8080');
});
2
3
4
5
6
7
8
# listen ํจ์
listen ํจ์๋ ๋๊ฐ์ง ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ฌ๋ฐ๋๋ค. ์ฒซ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ ์๋ฒ๋ฅผ ๋์ธ port ๋ฒํธ, ๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ ์๋ฒ๋ฅผ ๋์ด ํ ์คํํ ์ฝ๋ฐฑํจ์๋ฅผ ์ ๋ฌํ๋ค.
# server ๋์ฐ๊ธฐ
> node server.js
listening on 8080
2
์๋ฒ๋ฅผ ๋์ธ ๋ ์๋ฒ ์ฝ๋๋ฅผ ์์ฑํ ํ์ผ์ node๋ก ์คํ์์ผ์ฃผ๋ฉด ๋๋ค. ๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌํ ์ฝ์listening on 8080
์ด ์ถ๋ ฅ๋๋๊ฒ์ ํ์ธ ํ ์ ์๋ค.
# server ์ ์ํ๊ธฐ
์์์ ์์ฑํ ํฌํธ ๋ฒํธ๋ฅผ ๋ธ๋ผ์ฐ์ ์ ์ฃผ์์ฐฝ์์ localhost:port
์ port ์๋ฆฌ์ ์
๋ ฅํ ๋ธ๋ผ์ฐ์ ์์ ์ฐ๋ค.
ex / localhost:8080
# HTTP Methods
- GET: getting data (์กฐํ)
- POST: creating data (์์ฑ)
- PUT: updating data (์ ์ฒด ์์ )
- DELETE: deleting data (์ญ์ )
- PATCH: deleting data (์์ )
# GET request
์๋ฒ์ ์ํ๋ ๊ฒฝ๋ก๋ก
get
์์ฒญ ์ฒ๋ฆฌ
/* with body-parser
* ํ๋ผ๋ฏธํฐ ๋ณ์ ๋ป
* req: request ์์ฒญ
* res: response ์๋ต
*/
app.get('/path', function (request, response) {
response.send('hello');
});
2
3
4
5
6
7
8
์์ ์๋ฒ๋ฅผ ์คํํด locathost:8080/path
๋ก ์ ์ํ๋ฉด hello ๋ฌธ๊ตฌ๋ฅผ ํ์ธํ ์ ์๋ค.
# ์๋ฒ์์ HTML ํ์ผ ์ ๋ฌํ๊ธฐ
app.get('/path', function (request, response) {
response.sendFile(__dirname + '/index.html');
});
2
3
# POST request
POST ์์ฒญ์ผ๋ก ํด๋น ๊ฒฝ๋ก์ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์ ์ ์ก
POST ์์ฒญ์ผ๋ก ํด๋น ๊ฒฝ๋ก์ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์ ์ ์กํ ์ ์๋ค.
๋ณดํต ๋ฐ์ดํฐ๋ฅผ ์์ฑํ ๋ ์ฌ์ฉ๋๋ค. req.body์ ๋ฐ์ดํฐ๋ฅผ ๋ด์์ ๋ณด๋ธ๋ค.
app.post('/path', function (req, res) {
var post = req.body;
});
2
3
# PUT request
๋ฐ์ดํฐ๋ฅผ ์์ ํ ๋ ์ฌ์ฉ๋๋ Method ๋ฐ์ดํฐ์ ์กฐ๊ฑด์ ๋ณด๋ด๋ฉด, ์กฐ๊ฑด์ ๋ง๋ ์ ๋ณด๋ฅผ ์ฃผ์ด์ง ๋ฐ์ดํฐ๋ก ์์ ํ๋ค.
app.put('/path', function (req, res) {
...
}
2
3
# DELETE request
๋จ์ผ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ๋ ์ฌ์ฉ ๋ณดํต Query Params๋ Path Variables์ Body๋ฅผ ํผํฉํด์ ์ ์ฌ์ฉํ๋ค. ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์
app.delete('/path', function (req, res) {
...
}
2
3
# + express ์์ status code ๋ฃ๊ธฐ
express์์ ์ง์ ์๋ต์ฝ๋๋ฅผ ์์ฒญํ ์ ์๋ค.
# status()
ํ๋ผ๋ฏธํฐ๋ก ์๋ต์ฝ๋๋ฅผ ์ ๋ฌํ๋ค. ๋์์ ์ด์ ๊ฐ์ด send
ํจ์๋ฅผ ์ฌ์ฉํด cmd
์ ์ถ๋ ฅํ ์ ์๋ค.
app.get('/', (req, res) => {
res.status(200).send('hello world');
});
2
3
๋๋ ์ด์ ๊ฐ์ด send
๋ฅผ ์ฌ์ฉํด message ์ง์ ์ ๋ฌํด ๊ฐ๋ฐ์๋๊ตฌ์ console
์ ๋ฉ์ธ์ง๋ฅผ ์ถ๋ ฅํ ์ ์๋ค.
app.get('/', (req, res) => {
res.status(200).send({ message: 'success' });
});
2
3
# ๊ฒฝ๋ก ์ด๋ํ๊ธฐ
# res.redirect()
์์ฒญ์ ๊ฒฝ๋ก๋ฅผ ์ฌ์ค์ ํ๋ค.
์ด ์์ ๋ /edit
๊ฒฝ๋ก์์ <form>
๋ฐ์ดํฐ๋ฅผ ์์ ํ **redirect
**๋ฅผ ์ฌ์ฉํด ๊ฒฝ๋ก๋ฅผ ์ฌ์ค์ ํ ์์ ์ด๋ค.
app.put('/edit', (req, res) => {
db.collection('post').updateOne(
{ _id: parseInt(req.body.id) },
{ $set: { title: req.body.title, date: req.body.date } },
(err, result) => {
console.log('done fixing it');
res.redirect('/list'); // reset the path
}
);
});
2
3
4
5
6
7
8
9
10
# app.use()
express์์ ๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ์ฉํ ๋ app.use(~)
๋ฅผ ์์ฑํ๋ฉด "๋๋ ๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค" ๋ผ๋ ์๋ฏธ์ด๋ค.
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));
const methodOverride = require('method-override');
app.use(methodOverride('_method'));
2
3
4
5
6
7
8
์์ฒ๋ผ ๋ค์ํ ๋ฏธ๋ค์จ์ด๋ค์ app.use
๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
# Express middleware
Express ๋ฏธ๋ค์จ์ด๋ ์ฝ๊ฒ๋งํด ํจ์์ด๋ค.Express์์๋ ์ฌ์ค ๋ชจ๋ ๊ฒ๋ค์ด ๋ฏธ๋ค์จ์ด๋ผ๊ณ ํ ์ ์๋ค. ๋ฏธ๋ค์จ์ด ํจ์๋ ์์ฒญ(req), ์๋ต(res), ๊ทธ๋ฆฌ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฒญ-์๋ต ์ฃผ๊ธฐ ์ค ๊ทธ ๋ค์์ ๋ฏธ๋ค์จ์ด ํจ์์ ๋ํ ์ก์ธ์ค ๊ถํ์ ๊ฐ๋ ํจ์์ด๋ค. ๊ทธ ๋ค์์ ๋ฏธ๋ค์จ์ด ํจ์๋ ์ผ๋ฐ์ ์ผ๋ก next๋ผ๋ ์ด๋ฆ์ ๋ณ์๋ก ํ์๋๋ค.