1. express๋?
๐ก Express๋ Node.js๋ก ์น์๋ฒ๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉํ ์ ์๋ ํ๋ ์์ํฌ
์น์๋ฒ๋ฅผ ๋ง๋ค ๋ ํ์ํ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ ์ ๊ณต
Express ๊ตฌ์ฑ์์
๐น๋ฏธ๋ค์จ์ด
๐น๋ฆฌํ์คํธ ๋ฆฌ์คํฐ์ค ๊ฐ์ฒด
๐น๋ผ์ฐํฐ
๐น์๋ฌ ํธ๋ค๋ฌ
๐นํ์ผ
2. ๋ฏธ๋ค์จ์ด
๋ฏธ๋ค์จ์ด๋?

๋ฏธ๋ค์จ์ด๋?
๐น๋ฆฌํ์คํธ์ ๋ฆฌ์คํฐ์ค ์ฌ์ด์ ์์นํ์ฌ ์ด๋ ํ ๋์์ ํ๋ ํจ์
๐นExpress๋ฅผ ๋ฏธ๋ค์จ์ด์ ์งํฉ์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค
***๋ฆฌํ์คํธ๋ฅผ ๋ฐ๊ณ ๋ฆฌ์คํฐ์ค๋ฅผ ๋ณด๋ด๋ ๊ฒ์ด ์น ๊ธฐ๋ณธ ๋์

ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ฆฌํ์คํธ๋ฅผ ๋ฐ์์ ๋ฆฌ์คํฐ์ค๋ฅผ ๋ง๋ค์ด ์ ๋ฌ
๋ฏธ๋ค์จ์ด์ ๊ตฌ์กฐ
function greeting(req,res){
console.log(req);
res.json({message:'์๋
, ์ฝ๋์ (;'});
}//์ด๋ฆ์ด ์๋ ํจ์๋ก ๋ง๋ค ์๋ ์๋ค
ํ๋ผ๋ฏธํฐ๊ฐ 2๊ฐ์ธ ๊ฒฝ์ฐ
๐น๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ฏธ๋ค์จ์ด ๊ตฌ์กฐ
function greeting(req,res, next){
next();
res.json({message:'์๋
, ์ฝ๋์ (;'});
}
ํ๋ผ๋ฏธํฐ๊ฐ 3๊ฐ์ธ ๊ฒฝ์ฐ
๐น next๋ ๋ค์ ๋ฏธ๋ค์จ์ด ํจ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค
โ ์ถ๊ฐ์ ์ธ ์๋ฌ ํธ๋ค๋ง์ ์ํด ๋ค์ ์๋ฌ ํธ๋ค๋ฌ๋ก ์ฒ๋ฆฌ๋ฅผ ๋๊ธฐ๋ ์ญํ ์ ํ๊ธฐ๋ ํ๋ค
function greeting(err,req,res, next){
res.json({message:'์๋
, ์ฝ๋์ (;'});
}
ํ๋ผ๋ฏธํฐ๊ฐ 4๊ฐ์ธ ๊ฒฝ์ฐ
๐นerr๋ ์๋ฌ์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊ฒจ์๋ค
๐น ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก๋ ์คํ์ด ์๋๋ค→ throw๋ next(err)๋ก ์คํ
๋ฏธ๋ค์จ์ด์ ์ฌ์ฉ๋ฒ
๐ก๋ฏธ๋ค์จ์ด์ ์ฌ์ฉ๋ฒ (1)
๋ค์ ๋ฏธ๋ค์จ์ด๊ฐ ๋๋ ๊ธฐ์ค
→ ์๊ท๋จผํธ๋ก ๋๊ฒจ์ค ์์์ ๋ฐ๋ผ ๋ค์ ๋ฏธ๋ค์จ์ด๊ฐ ๊ฒฐ์ ๋๋ค
app.get('/hello',meeting,waving, greeting);
import express from 'express';
const app = express();
//app.get('/', (req, res) => {
// res.json({ message: '์๋
, ์ฝ๋์ (;' });
//});//์ฝ๋ฐฑํจ์๊ฐ ๋ฏธ๋ค์จ์ด ์ญํ ์ ํ๊ณ ์๋ค (๋ฆฌํ์คํธ ํธ๋ค๋ฌ)
function meeting(req,res,next){
console.log('์ค!');
next();
}
function waving(req, res, next){
console.log('(์์ ํ๋ค๋ค.)');
next();
}
function greeting(req,res,next){
console.log('์๋
!');
res.json({message:'์๋
, ์ฝ๋์ (;'});
}//์ด๋ฆ์ด ์๋ ํจ์๋ก ๋ง๋ค ์๋ ์๋ค
app.get('/',greeting);
app.get('/hello',meeting, waving, greeting);
//app.METHOD(path, callback[, callback, ...])
app.listen(3000, () => {
console.log('Server is listening on port 3000');
});
๐ก๋ฏธ๋ค์จ์ด์ ์ฌ์ฉ๋ฒ (2)
ํน์ ๊ฒฝ๋ก์ http ๊ด๊ณ ์์ด ๊ฐ์ ๋์์ ์คํํ๋๋กํ ๋ all ๋ฉ์๋๋ฅผ ํ์ฉํ๋ค
import express from 'express';
const app = express();
//app.get('/', (req, res) => {
// res.json({ message: '์๋
, ์ฝ๋์ (;' });
//});//์ฝ๋ฐฑํจ์๊ฐ ๋ฏธ๋ค์จ์ด ์ญํ ์ ํ๊ณ ์๋ค (๋ฆฌํ์คํธ ํธ๋ค๋ฌ)
app.all('/hello',(req,res,next)=>{
console.log('์๋
,all!');
next();
})
app.get('/hello',(req,res,next)=>{
console.log('์๋
,GET!');
res.json({message:'์๋
, ์ฝ๋์ (;'});
});
app.post('/hello',(req,res,next)=>{
console.log('์๋
,POST!');
res.json({message:'์๋
, ์ฝ๋์ (;'});
});
//app.METHOD(path, callback[, callback, ...])
app.listen(3000, () => {
console.log('Server is listening on port 3000');
});
use ๋ฉ์๋
๐น all ๋ฉ์๋์ ๋น์ทํ ์ญํ ์ ํ๋ค
๐น ๋ชจ๋ ๋ฆฌํ์คํธ๊ฐ ์ง์ ๋ผ์ฐํฐ๋ฅผ ๊ฑฐ์ณ๊ฐ๋๋ก ํ ์ ์๋ค
import express from 'express';
const app = express();
//app.get('/', (req, res) => {
// res.json({ message: '์๋
, ์ฝ๋์ (;' });
//});//์ฝ๋ฐฑํจ์๊ฐ ๋ฏธ๋ค์จ์ด ์ญํ ์ ํ๊ณ ์๋ค (๋ฆฌํ์คํธ ํธ๋ค๋ฌ)
app.use('/hello',(req,res,next)=>{
console.log('์๋
, use!');
next();
}) -> hello๋ก ์์ํ๋ ๋ชจ๋ ๊ฒฝ๋ก, ๋ผ์ฐํฐ์ ๋์๋๋ค
app.all('/hello/all',(req,res,next)=>{
console.log('์๋
,all!');
next();
})
app.get('/hello/all',(req,res,next)=>{
console.log('์๋
,GET!');
res.json({message:'์๋
, ์ฝ๋์ (;'});
});
app.post('/hello/all',(req,res,next)=>{
console.log('์๋
,POST!');
res.json({message:'์๋
, ์ฝ๋์ (;'});
});
//app.METHOD(path, callback[, callback, ...])
app.listen(3000, () => {
console.log('Server is listening on port 3000');
});
๋ฏธ๋ค์จ์ด๋ก req,res ๋ค๋ฃจ๊ธฐ
๋ฆฌํ์คํธ์ ๋ฆฌ์คํฐ์ค๋ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ์ํ๋ ๊ฐ์ ์ฑ์ธ ์ ์๋ค
import express from 'express';
const app = express();
function one(req, res, next) {
console.log(req.query);
return next();
}
function two(req, res, next) {
console.log(req.query);
return next();
}
function three(req, res, next) {
console.log(req.query);
return res.json({ message: '์๋
, ์ฝ๋์ (;' });
}
app.get('/hello', one, two, three);
function authentication(req, res, next){
req.user="Codeit";
next();
}
app.get('/me', authentication,(req,res,next)=>{
console.log(req.uesr);
res.json({user: req.user});
});
app.listen(3000, () => {
console.log('Server is listening on port 3000');
});
์๋ฌ ์ฒ๋ฆฌํ๊ธฐ

๐นExpress๋ ๊ธฐ๋ณธ์ ์ธ ์๋ฌ ํธ๋ค๋ฌ๊ฐ ๋ด์ฅ๋์ด์๋ค
๐น๊ธฐ๋ณธ์ ์ผ๋ก html๋ก ์๋ฌ๋ฅผ ์ ๋ฌํ๋ค → json์ผ๋ก ๋ฐ๊พธ๋ ค๋ฉด ๋ฐ๋ก ์์ฑํด์ค์ผํ๋ค
import express from 'express';
const app = express();
function error(req, res, next) {
throw new Error('์๋ฌ ๋ฐ์!');
next(new Error('์๋ฌ ๋ฐ์!'));
next();
}
function ok(req, res, next) {
res.json({ message: 'OK!' });
}
app.get('/error', error, ok);
app.use((err, req, res,next)=>{
console.log(err);
res.json({message:'์๋ฌ ํธ๋ค๋ฌ!'});
});
app.listen(3000, () => {
console.log('Server is listening on port 3000');
});
๋ด์ฅ ๋ฏธ๋ค์จ์ด
Express๋ ๋ฏธ๋ฆฌ ํฌํจ๋์ด์๋ ๋ฏธ๋ค์จ์ด๊ฐ ์๋ค → ๋ด์ฅ ๋ฏธ๋ค์จ์ด
๐น๋ชจ๋ ๊ฒฝ๋ก์ ๋ํ ๋ฆฌํ์คํธ์ ๋ฆฌ์คํฐ์ค์ ๋ํด ๋์ํ๋ ๊ฒ์ด ๋ชฉ์ !
(๊ฒฝ๋ก๋ฅผ ์๋ตํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค)
express.json()
๐น๋ฆฌํ์คํธ ๋ฐ๋์ ์๋ json์ ๊ฐ์ฒด๋ก ๋ถ๋ฌ์ค๊ธฐ ์ํด ์ฌ์ฉํ๋ค
๐น์คํ๊ฒฐ๊ณผ๋ก ํจ์ ์์ฒด๋ฅผ ๋ฐํํ๋ค
๐ก๋ฆฌํ์คํธ ๋ฐ๋์ ๋ด์ฉ์ req ๊ฐ์ฒด์ body ์์ฑ์ ํตํด์ ๊ฐ์ ธ์ฌ ๋ ์ฌ์ฉํ๋ค req ๊ฐ์ฒด์ body ์์ฑ์ ๋ฆฌํ์คํธ ๋ฐ๋์ ๊ฐ์ ๊ฐ์ฒด๋ก ๋ด๋ ์ญํ
import express from 'express';
const app = express();
app.use(express.json());
//app.use((req, res,next)=>{...})
app.post('/products', (req, res) => {
console.log(req.body);
res.json({ message: 'Product ์ถ๊ฐํ๊ธฐ' });
});
app.post('/users', (req, res) => {
console.log(req.body);
res.json({ message: 'User ์ถ๊ฐํ๊ธฐ' });
})
app.listen(3000, () => {
console.log('Server is listening on port 3000');
});
express.urlencoded()
๐นcontente type์ด application/x-www-form-urlencoded์ธ ๋ฆฌํ์คํธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค
๐น์ฃผ๋ก html์ ์ ๋ ฅํผ์ ํตํด ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ ์ฌ์ฉํ๋ค)
app.use(express.urlencoded({extended:true}));
express.static()
๐น์๋ฒ์ ํ์ผ์ ์๋ฒ ์ธ๋ถ๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค
app.use(express.static('public')); //ํ์ผ์ ๋๋ ํ ๋ฆฌ ์์น๋ฅผ ๊ดํธ์ ์ ๋๋ค
ex) JSON ํฌ๋ฉง์ ๋ฆฌํ์คํธ ๋ฐ๋๋ฅผ ๋ฐ์์, 201 Created ์ํ ์ฝ๋์ ํจ๊ป title๊ณผ content์ ๊ฐ์ ๊ทธ๋๋ก ๋ฐํํ๋๋ก ํ๋ ์ฝ๋
import express from 'express';
const app = express();
app.use(express.json());
app.post('/posts', (req, res) => {
const { title, content } = req.body;
res.status(201).json({ title, content });
});
app.listen(3000, () => {
console.log('Server is listening on port 3000');
});
์๋ํํฐ ๋ฏธ๋ค์จ์ด
๐นcookie-parser
๋ฆฌํ์คํธ๋ก ์ ๋ฌ๋ฐ์ ์ฟ ํค๋ฅผ ์ฝ๊ฒ ํ์ฑํ ์ ์๊ฒ ํ๋ ๋ฏธ๋ค์จ์ด
๐นmorgan
์๋ฒ๋ก ๋ค์ด์จ ๋ฆฌํ์คํธ๋ฅผ ๋ก๊ทธ๋ก ๋จ๊ธฐ๋ ๋ฏธ๋ค์จ์ด
๐นcors
CORS๋ Cross-Origin Resource Sharing์ ์ฝ์
์น ์ฌ์ดํธ๊ฐ ๋ค๋ฅธ ๋๋ฉ์ธ์ ์๋ ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๋๋ก ๋ธ๋ผ์ฐ์ ์์ HTTP ํค๋๋ฅผ ํตํด ์ ์ดํ๋ ๊ฒ
๐นmulter
Content-Type์ด multipart/form-data์ธ ๋ฆฌํ์คํธ๋ฅผ ๊ฐํธํ๊ฒ ๋ค๋ฃฐ ์ ์๋ ๋ฏธ๋ค์จ์ด
์ฌ๊ธฐ์ multipart/form-data๋ ์ ๋ ฅ ํผ์ ์์ฑํ๊ณ ์ ์กํ ๋, ๋ค์ํ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ก ๊ฐ๋ฅํ๊ฒ ํ๋ ํ์
multipart/form-data ํ์ ์ผ๋ก ์ ๋ฌ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฆฌํ์คํธ ๊ฐ์ฒด์์ ์ฌ์ฉํ ์ ์๋๋กํ๋ค
3. ๋ผ์ฐํฐ
๋ผ์ฐํธ ์ค๋ณต ์ ๊ฑฐํ๊ธฐ
๊ฐ ๊ฒฝ๋ก๋ง๋ค ๋ผ์ฐํฐ๊ฐ ์๊ฒจ๋๋ฉด ์ฝ๋๊ฐ ๋ณต์กํด์ง๋ค
→ ๋ฐ๋ผ์ ์ค๋ณต๋ ๊ฒฝ๋ก์ ๋ผ์ฐํฐ๋ฅผ ์ ๊ฑฐํด์ค๋ค
app.route('/products')
.get((req, res)=>{
res.json({message:'Product ๋ชฉ๋ก ๋ณด๊ธฐ'});
})
.post((req, res) => {
res.json({ message: 'Product ์ถ๊ฐํ๊ธฐ' });
})
๐น app.route๋ฅผ ์ฌ์ฉํด์ ์ค๋ณต๋ ๊ฒฝ๋ก์ ๋ผ์ฐํฐ๋ฅผ ์ ๊ฑฐํ ์ ์๋ค
๋ผ์ฐํฐ ์์ฑ
const productRouter =express.Router();//๋ผ์ฐํฐ ์์ฑ
productRouter.route('/products')
.get((req, res) => {
res.json({ message: 'Product ๋ชฉ๋ก ๋ณด๊ธฐ' });
})
.post((req, res) => {
res.json({ message: 'Product ์ถ๊ฐํ๊ธฐ' });
});
productRouter.route('/products/:id')
.patch((req, res) => {
res.json({ message: 'Product ์์ ํ๊ธฐ' });
})
.delete((req, res) => {
res.json({ message: 'Product ์ญ์ ํ๊ธฐ' });
});
๋ผ์ฐํฐ ๋ ๋ฒจ ๋ฏธ๋ค์จ์ด
ํน์ ๋ผ์ฐํฐ ๊ทธ๋ฃน์ธ ๋ผ์ฐํฐ์๋ง ์ ์ฉ๋๋ ๊ฒ์ ๋ผ์ฐํฐ ๋ ๋ฒจ ๋ฏธ๋ค์จ์ด๋ผ๊ณ ํ๋ค
import express from 'express';
const app = express();
const productRouter = express.Router();
productRouter.unsubscribe((req,res,next)=>{
console.log('Product Router์์ ํญ์ ์คํ!');
next();
})
productRouter.route('/')
.get((req, res) => {
res.json({ message: 'Product ๋ชฉ๋ก ๋ณด๊ธฐ' });
})
.post((req, res) => {
res.json({ message: 'Product ์ถ๊ฐํ๊ธฐ' });
});
productRouter.route('/:id')
.patch((req, res) => {
res.json({ message: 'Product ์์ ํ๊ธฐ' });
})
.delete((req, res) => {
res.json({ message: 'Product ์ญ์ ํ๊ธฐ' });
});
const userRouter =express.Router();
userRouter.get('/',(req,res,next)=>{
res.json({message: 'User ๋ชฉ๋ก ๋ณด๊ธฐ'});
});
app.use('/products', productRouter);
app.use('/users',userRouter)
app.listen(3000, () => {
console.log('Server is listening on port 3000');
});
Express ํ๋ก์ ํธ ๊ตฌ์กฐ์ ๋ชจ๋ํ
router์ ๋ฏธ๋ค์จ์ด๋ฅผ ๊ฐ๊ฐ ํ์ผ๋ก ๋ถ๋ฆฌํ๋ค
