goal
๋ฏธ๋ค์จ์ด์ ๋ํ ์์ธํ ์ค๋ช ์ ๐๏ธ ๊ณต์๋ฌธ์๋ฅผ ์ฐธ๊ณ
๋ค๋ฅธ ์ฌ๋์ด ๋ง๋ (= third party middleware) or ๋ด๊ฐ ๋ง๋ ์ํํธ์จ์ด๋ฅผ ๊ณต์ ํด์ ์ฐ๋ ๊ฐ๋
express ์ ํ๋ฆฌ์ผ์ด์
์ ๋ณธ์ง์ ์ผ๋ก (์ฌ๋ฌ๊ฐ์?) ๋ฏธ๋ค์จ์ด ํจ์ ํธ์ถ์ด๋ค.
๋ฏธ๋ค์จ์ด ํจ์ ์ฌ์ฉ์
npm install <๋ฏธ๋ค์จ์ด name> --save
๋ฅผ ํ๋ฉด ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค.
๋ฏธ๋ค์จ์ด ํจ์๋
// index.js
var express = require('express');
var app = express();
var myLogger = function (req, res, next) {
console.log('LOGGED');
next();
};
// ๐๏ธ
// myLogger๋ ๋ฏธ๋ค์จ์ด ํจ์
// -> ์ฑ์ ๋ํ ์์ฒญ์ด ํด๋น ํจ์๋ฅผ ๊ฑฐ์ณ ์ ๋ฌ๋ ๋ ๋จ์ํ โLOGGEDโ๋ฅผ ์ธ์ (in terminal)
app.use(myLogger);
// ๐๏ธ
// ๋ฏธ๋ค์จ์ด ํจ์๋ฅผ ๋ก๋ํ๋ ค๋ฉด (๋ฏธ๋ค์จ์ด ํจ์๋ฅผ ์ง์ ํ์ฌ) โญ๏ธapp.use()๋ฅผ ํธ์ถโญ๏ธํด์ผ ํ๋ค.
// ์ฑ์ด ์์ฒญ์ ์์ ํ ๋๋ง๋ค, ์ฑ์ โLOGGEDโ๋ผ๋ ๋ฉ์์ง๋ฅผ ํฐ๋ฏธ๋์ ์ธ์ํ๋ค.
// โญ๏ธ๋ฏธ๋ค์จ์ด์ ๋ก๋ ์์๋ ์ค์ํ๋ฉฐ, ๋จผ์ ๋ก๋๋๋ ๋ฏธ๋ค์จ์ด ํจ์๊ฐ ๋จผ์ ์คํ๋๋ค.โญ๏ธ
// ๋ฏธ๋ค์จ์ด ํจ์ myLogger๋ ๋จ์ํ ๋ฉ์์ง๋ฅผ ์ธ์ํ ํ โญ๏ธnext() ํจ์๋ฅผ ํธ์ถโญ๏ธํ์ฌ ์คํ ๋ด์ ๊ทธ ๋ค์ ๋ฏธ๋ค์จ์ด ํจ์์ ์์ฒญ์ ์ ๋ฌํ๋ค.
app.get('/', function (req, res) {
res.send('Hello 222World!');
});
// if) app.use(myLogger); -> ์ฌ๊ธฐ์ ์์นํ๋ค๋ฉด,
// ๐๏ธ
// ๋ฃจํธ ๊ฒฝ๋ก์ ๋ํ ๋ผ์ฐํ
์ดํ์ myLogger๊ฐ ๋ก๋๋๋ฉด, ๋ฃจํธ ๊ฒฝ๋ก์ ๋ผ์ฐํธ ํธ๋ค๋ฌ๊ฐ ์์ฒญ-์๋ต ์ฃผ๊ธฐ๋ฅผ ์ข
๋ฃํ๋ฏ๋ก ์์ฒญ์ ์ ๋๋ก myLogger์ ๋๋ฌํ์ง ๋ชปํ๋ฉฐ ์ฑ์ โLOGGEDโ๋ฅผ ์ธ์ํ์ง ์๋๋ค.
app.listen(3000);
// ๐๏ธ body-parser ๋ฏธ๋ค์จ์ด
app.use(bodyParser.urlencoded({ extended: false }))
// ๐๏ธ
// bodyParser.urlencoded({ extended: false })
// ์ด ์ฝ๋๋ ์คํ๋๋ฉด์, ๊ฒฐ๊ณผ๋ก ๋ฏธ๋ค์จ์ด๊ฐ ๋ค์ด์ค๊ฒ ๋๋ค.
// ๋ฐ๋ํ์๊ฐ ๋ง๋๋ ๋ฏธ๋ค์จ์ด๋ฅผ ํํํ๋ ํํ์
// main.js๊ฐ ์คํ๋ ๋๋ง๋ค ์์ ์ฝ๋๊ฐ ์คํ๋๋ค.
// ๋ด๋ถ์ ์ผ๋ก๋, ์ฌ์ฉ์๊ฐ ์ ์กํ body๋ถ๋ถ์ ๋ฐ๊ฟ์ค๋ค.
// let body = '';
// req.on('data', (data) => body += data)
// ๐๏ธ compression ํ์ผ์ ํฌ๊ธฐ๋ฅผ ์์ถํด์ฃผ๋ ๋ฏธ๋ค์จ์ด
app.use(compression())
-------------------------------------------------------
// ๐๏ธ ๋๋ง์ ๋ฏธ๋ค์จ์ด ๋ง๋ค๊ธฐ ๐๏ธ
app.use((req, res, next) => { //next์ , req/res ๋ค์์ ์ฒ๋ฆฌ๋์ด์ผ ํ ๋ฏธ๋ค์จ์ด๊ฐ ๋ด๊ฒจ์๋ค.
fs.readdir("./data", (error, filelist) => {
req.list = filelist
next() // req/res ๋ค์ next๋ฅผ ํธ์ถํ๋ค.
})
})
// ๐๏ธ ๋ง๋ค์๋ ๋ฏธ๋ค์จ์ด๋ฅผ (*)๋ชจ๋ get์์ฒญ์ผ ๋๋ก ๋ผ์ฐํ
app.get("*", (req, res, next) => { //next์ , req/res ๋ค์์ ์ฒ๋ฆฌ๋์ด์ผ ํ ๋ฏธ๋ค์จ์ด๊ฐ ๋ด๊ฒจ์๋ค.
fs.readdir("./data", (error, filelist) => {
req.list = filelist
next() // req/res ๋ค์ next๋ฅผ ํธ์ถํ๋ค.
})
})
--------------------------------------------------------
// ๐๏ธ ๋ฏธ๋ค์จ์ด ์ฌ์ฉ๋ฒ
app.use('/user/:id', function(req, res, next) {
console.log('Request URL:', req.originalUrl);
next(); // next๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๐๏ธ ์๋์ ํจ์๋ฅผ ํธ์ถํ ๊ฒ๊ณผ ๊ฐ์
}, function (req, res, next) {
console.log('Request Type:', req.method);
next();
});
//! but!
app.get('/user/:id', function (req, res, next) {
console.log('ID:', req.params.id);
next();
}, function (req, res, next) {
res.send('User Info'); // ์ด๋ ๊ฒ sendํด๋ฒ๋ฆฌ๋ฉด ๋ค์ ๋ฏธ๋ค์จ์ด๐๏ธ๋ ํธ์ถ๋์ง ์๋๋ค.
});
app.get('/user/:id', function (req, res, next) {
res.end(req.params.id);
});
//! or~
app.get('/user/:id', function (req, res, next) {
if (req.params.id == 0) next('route'); // ์ด๋ฐ์์ผ๋ก ๋ฏธ๋ค์จ์ด๋ฅผ if๋ฌธ์ผ๋ก ๋ค์ ์คํ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ ์ ์๋ค.
else next(); //
}, function (req, res, next) {
res.render('regular');
});
app.get('/user/:id', function (req, res, next) {
res.render('special');
});
์ถ์ฒ : ์ํ์ฝ๋ฉ https://www.youtube.com/watch?v=LX4MHFRiMhk&list=PLuHgQVnccGMAGOQu8CBDO9hn-FXFmm4Wp&index=15 / express ๊ณต์๋ฌธ์ https://expressjs.com/ko/guide/using-middleware.html