์น ์๋ฒ ํ๋ ์์ํฌ
์ต์คํ๋ ์ค
๋ฏธ๋ค์จ์ด
๋ผ์ฐํฐ์ ์๋ฌ ํธ๋ค๋ฌ
start์์ฑ
์ต์คํ๋ ์ค
: npm์ ์๋ ์น ์๋ฒ ํ๋ ์์ํฌ๋ก, ์๋ฒ ์ ์๊ณผ์ ์์ ๊ฒช๋ ๋ถํธํจ (4์ฅ ์ฐธ๊ณ , ๋ถํธํ ์ฝ๋ ๋ณด๊ธฐ์ ํ์ฅ์ฑ) ํด์์ ํธ์ ๊ธฐ๋ฅ ์ถ๊ฐ๋ฅผ ์ํด ๋ง๋ค์ด์ก๋ค.
ํน์ง
: http ๋ชจ๋์ ์์ฒญ๊ณผ ์๋ต ๊ฐ์ฒด์ ์ถ๊ฐ ๊ธฐ๋ฅ๋ค์ ๋ถ์ฌ.
: ๊ธฐ์กด ๋ฉ์๋ + ํธ๋ฆฌํ ๋ฉ์๋ ์ถ๊ฐ
: ์ฝ๋ ๋ถ๋ฆฌํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด ๊ด๋ฆฌ ์ฉ์ด
: if๋ฌธ์ ์ด์ฉํ ์์ฒญ ๋ฉ์๋์ ์ฃผ์๊ตฌ๋ณ X
: ๋ง์ ์ฌ๋์ด ์ฌ์ฉํ๊ธฐ์ ๋ฒ๊ทธ๊ฐ ์ ๊ณ , ๊ธฐ๋ฅ ์ถ๊ฐ๋ ์ ์ง ๋ณด์๊ฐ ํ๋ฐํจ
์ต์คํ๋ ์ค ์ธ์ ์น ํ๋ ์ ์ํฌ
: koa, hapi (์ฌ์ฉ๋์ด ์ต์คํ๋ ์ค์ ๋นํด ์ ์)
6.1. ์ต์คํ๋ ์ค ํ๋ก์ ํธ ์์ํ๊ธฐ
์ต์คํ๋ ์ค ํ๋ก์ ํธ ์ค์ต ๊ณผ์ ์ ๋ํด ์ค๋ช ํ๋ค.
์ค์ต์ ์งํํ (learn-express) ํด๋ ์๋ก ์ค์ -> package.json์ ์ ์ผ ๋จผ์ ์์ฑ
way1) package.json์ ์์ฑํด ์ฃผ๋ npm init ๋ช ๋ น์ด๋ฅผ ์ฝ์์์ ํธ์ถํด ๋จ๊ณ์ ์ผ๋ก ๋ด์ฉ๋ฌผ์ ์ ๋ ฅ
way2) npm init -y๋ฅผ ์ ๋ ฅํด ํ์ผ์ ๋ง๋ ๋ค ๋ด์ฉ์ ์์
+) version์ด๋ description, author, license๋ ์ํ๋ ๋๋ก ์์ ๋กญ๊ฒ ์์
+) nodemon์ ๊ฐ๋ฐ์ฉ์ผ๋ก๋ง ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅ. ๋ฐฐํฌ ํ์๋ ์ ์ฌ์ฉ ์ ํจ
// package.json
{
"name": "learn-express",
"version": "0.0.1",
"description": "์ต์คํ๋ ์ค๋ฅผ ๋ฐฐ์ฐ์",
"main": "app.js",
"scripts": {
"start": "nodemon app" // start ์์ฑ์ ์์ง ๋ง๊ธฐ!
// nodemon app์ ํ๋ฉด app.js๋ฅผ nodemon์ผ๋ก ์คํํ๋ค = nodemon ๋ชจ๋๋ก ์๋ฒ๋ฅผ ์๋์ผ๋ก ์ฌ์์
},
"author": "ZeroCho",
"license": "MIT"
}
์๋๋ ์๋ฒ ์ญํ ์ ํ ํ์ผ
+) ์ต์คํ๋ ์ค ๋ด๋ถ์ http ๋ชจ๋์ด ๋ด์ฅ๋์ด ์์ผ๋ฏ๋ก ์๋ฒ์ ์ญํ ๊ฐ๋ฅ
+) GET ์์ฒญ ์ธ์๋ POST, PUT, PATCH, DELETE, OPTIONS์ ๋ํ ๋ผ์ฐํฐ๋ฅผ ์ํ app.post, app.put, app.patch. app.delete, app.options ๋ฉ์๋๊ฐ ์กด์ฌ
// app.js
const express = require('express');
const app = express();
// Express ๋ชจ๋์ ์คํํด app ๋ณ์์ ํ ๋น
app.set('port', process.env.PORT || 3000);
// ์๋ฒ๊ฐ ์คํ๋ ํฌํธ๋ฅผ ์ค์ . ๊ฐ์ฒด์ PORT ์์ฑO -> ๊ทธ ๊ฐ์ ์ฌ์ฉํ๊ณ / X -> ๊ธฐ๋ณธ๊ฐ์ผ๋ก 3000๋ฒ ํฌํธ
app.get('/', (req, res) => {
//์ฃผ์์ ๋ํ GET ์์ฒญ์ด ์ฌ ๋,
res.send('Hello, Express');
// ์๋ต์ผ๋ก Hello, Express๋ฅผ ์ ์ก
});
app.listen(app.get('port'), () => {
console.log(app.get('port'), '๋ฒ ํฌํธ์์ ๋๊ธฐ ์ค');
});
$ npm start
์์ ๋ช ๋ น์ด๋ฅผ ํตํด์ ์๋ฒ๋ฅผ ์คํ, ๋ก์ปฌ ํธ์คํธ ์ ์ ์ Hello, Express ๊ฐ ์ถ๋ ฅ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ฌธ์์ด ์๋ HTML์ผ๋ก ์๋ต์ ์ํ ๊ฒฝ์ฐ, ํด๋น htmlํ์ผ ์์ฑ๊ณผ res.sendFile ๋ฉ์๋ ์ฌ์ฉ
์ด๋ฅผ ์ํด์ app.js ํ์ผ ์์
// app.js
const express = require('express');
const path = require('path');
const app = express();
app.set('port', process.env.PORT || 3000);
app.get('/', (req, res) => {
// res.send('Hello, Express');
res.sendFile(path.join(__dirname, '/index.html'));
});
app.listen(app.get('port'), () => {
console.log(app.get('port'), '๋ฒ ํฌํธ์์ ๋๊ธฐ ์ค');
});
6.2. ์์ฃผ ์ฌ์ฉํ๋ ๋ฏธ๋ค์จ์ด
๋ฏธ๋ค์จ์ด
: ์ต์คํ๋ ์ค์ ํต์ฌ
: ์์ฒญ๊ณผ ์๋ต์ ์ค๊ฐ(middle)์ ์์น
: ๋ผ์ฐํฐ์ ์๋ฌ ํธ๋ค๋ฌ ๋ฑ์ด ์๋ค.
: ์์ฒญ๊ณผ ์๋ต์ ์กฐ์ํด ๊ธฐ๋ฅ์ ์ถ๊ฐ, ๋์ ์์ฒญ ์ ๊ฑฐ
: app.use(๋ฏธ๋ค์จ์ด) ํ์์ผ๋ก ๋ง์ด ์ฌ์ฉ
: ์์์๋ถํฐ ์๋๋ก ์์๋๋ก ์คํ
: app.use๋ app.get ๊ฐ์ ๋ผ์ฐํฐ์ ๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฅ์ฐฉ ๊ฐ๋ฅ
์๋๋ ์ต์คํ๋ ์ค์ ๋ฏธ๋ค ์จ์ด ์ฐ๊ฒฐ ์ฌ๋ก
* ์ฃผ์๋ฅผ ์ฒซ ๋ฒ์งธ ์ธ์๋ก X -> ๋ฏธ๋ค์จ์ด๋ ๋ชจ๋ ์์ฒญ์์ ์คํ๋๊ณ ,
* ์ฃผ์ O -> ํด๋นํ๋ ์์ฒญ์์๋ง ์คํ
// app.js
...
app.set('port', process.env.PORT || 3000);
app.use((req, res, next) => {
console.log('๋ชจ๋ ์์ฒญ์ ๋ค ์คํ๋ฉ๋๋ค.');
next();
});
app.get('/', (req, res, next) => {
// app.use์ ๋งค๊ฐ๋ณ์๊ฐ req, res, next์ธ ํจ์ ๋ฃ๊ธฐ
// next -> ๋ค์ ๋ฏธ๋ค์จ์ด๋ก ๋์ด๊ฐ๋ ํจ์
console.log('GET / ์์ฒญ์์๋ง ์คํ๋ฉ๋๋ค.');
next();
}, (req, res) => {
throw new Error('์๋ฌ๋ ์๋ฌ ์ฒ๋ฆฌ ๋ฏธ๋ค์จ์ด๋ก ๊ฐ๋๋ค.')
// ์๋ ๋ฏธ๋ค์จ์ด ์๋ฌ๋ก ๋ฐ์
});
app.use((err, req, res, next) => {
console.error(err);
res.status(500).send(err.message);
});
app.listen(app.get('port'), () => {
...
์๋์ ํ๋ฅผ ํตํ ๊ตฌ์ฒด์ ๋ฏธ๋ค์จ์ด ์ฌ์ฉ ๋ฐฉ๋ฒ ํ์ธ
[๋ ธ๋ 2] 8์ฅ. MongoDB (0) | 2023.11.24 |
---|---|
[๋ ธ๋ 2] 7์ฅ. MySQL (0) | 2023.11.17 |
[๋ ธ๋ 2] 5์ฅ. ํจํค์ง ๋งค๋์ (0) | 2023.11.03 |
[๋ ธ๋ 2] 4์ฅ. http ๋ชจ๋๋ก ์๋ฒ ๋ง๋ค๊ธฐ (0) | 2023.11.03 |
[๋ ธ๋ 2] 3์ฅ. ๋ ธ๋ ๊ธฐ๋ฅ ์์๋ณด๊ธฐ (2) (0) | 2023.10.13 |