[Node.JS] Express JS- Middle ware ๐Ÿšฉ

June hyoung Parkยท2020๋…„ 7์›” 26์ผ
0

NodeJs

๋ชฉ๋ก ๋ณด๊ธฐ
3/8
post-custom-banner

๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜๋Š” ์š”์ฒญ ์˜ค๋ธŒ์ ํŠธ(req), ์‘๋‹ต ์˜ค๋ธŒ์ ํŠธ (res), ๊ทธ๋ฆฌ๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์š”์ฒญ-์‘๋‹ต ์ฃผ๊ธฐ ์ค‘ ๊ทธ ๋‹ค์Œ์˜ ๋ฏธ๋“ค์›จ์–ดํ•จ์ˆ˜ ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๊ฐ–๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ทธ ๋‹ค์Œ์˜ ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ next๋ผ๋Š” ์ด๋ฆ„์˜ ๋ณ€์ˆ˜๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. - express ๊ณต์‹ ์‚ฌ์ดํŠธ -


Node.JS์™€ Express JS๋ฅผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ฏธ๋“ค์›จ์–ด๋ผ๋Š” ์šฉ์–ด๋ฅผ ๋งŽ์ด ์ ‘ํ•˜๊ฒŒ๋œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฏธ๋“ค์›จ์–ด ๋Š” ๊ณผ์—ฐ ๋ฌด์—‡์ผ๊นŒ?

๋ฏธ๋“ค์›จ์–ด ์ฆ‰, ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๊ฐ๊ฐ์˜ ๋™์ž‘์ด๋‚˜ ๊ตฌ์—ญ ๋‚ด์—์„œ ์‹œ์ž‘๊ณผ ๋ ์‚ฌ์ด์— ์ค‘๊ฐ„ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ํ•จ์ˆ˜์ด๋‹ค. Express JS ์—์„œ์˜ ์‚ฌ์šฉ์„ ์˜ˆ๋กœ ๋“ค์ž๋ฉด, ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์‚ฌ์ด์—์„œ ์ค‘๊ฐ„์ค‘๊ฐ„ ๋‹ค์–‘ํ•œ ์ผ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.


์˜ˆ๋ฅผ ๋“ค์–ด, ๋ผ์šฐํŒ…์„ ๊ตฌ์„ฑํ• ๋•Œ ์–ด๋–ค url์€ ๊ผญ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์ด ๋˜์–ด์žˆ๋Š” ์ƒํƒœ์—ฌ์•ผ๋งŒ ํ•ด๋‹น ๋ผ์šฐํŒ…์„ ๋ณผ์ˆ˜ ์žˆ๊ฒŒ๋” ํ•˜๊ณ ์‹ถ์„ ๋•Œ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด

function loginRequired(req,res,next){
    if(login != true){
        res.redirect(๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ)
    }else{
        next();
    }
};
router.get("/", loginRequired, (req, res) => {/*
/admin์ด๋™ํ›„ loginRequired์—์„œ login์ด ture์ผ ์‹œ์—๋งŒ responseํ•ด์ฃผ๊ธฐ.*/
  res.send("admin page");
});

์ด๋Ÿฐ์‹์˜ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ• ๊ฒƒ์ด๋‹ค. ์œ„ ์Šคํฌ๋ฆฝํŠธ์—์„œ loginRequired๋ผ๋Š” ์„ ์–ธ์‹ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ค€ ํ›„ ์•„๋ž˜์˜
๋ผ์šฐํŒ… ์ฃผ์†Œ ๋‹ค์Œ ๊ฐ’์œผ๋กœ ๋„˜๊ฒจ์คฌ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด "/"ํŽ˜์ด์ง€๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ผ ์‹œ ๋‹ค์Œ ์ธ์ž์— ์žˆ๋Š” loginRequired๋ผ๋Š” ๋ฏธ๋“ค์›จ์–ด๊ฐ€ ์‹คํ–‰๋˜๊ณ , login ์ƒํƒœ๊ฐ€ true์ด๋ฉด next() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ ์‘๋‹ตํ•ด์ฃผ๊ณ , false๋ผ๋ฉด ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๊ฒŒ๋œ๋‹ค.


๊ธฐ๋ณธ์ ์œผ๋กœ Express์˜ ๋ฏธ๋“ค์›จ์–ดํ•จ์ˆ˜๋Š” ์š”์ฒญ ๊ฐ์ฒด(request), ์‘๋‹ต ๊ฐ์ฒด (response) ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋Š” next ํ•จ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ์œ„์˜ ์˜ˆ์ œ์˜ if๋ฌธ์—์„œ else ์ฆ‰ login์ƒํƒœ๊ฐ€ true์ผ์‹œ next() ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ณ , ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ admin page๋ฅผ ์‘๋‹ตํ•ด์ฃผ๊ฒŒ ๋˜๋Š”๊ฒƒ์ด๋‹ค.


๋˜ํ•œ ๋ฏธ๋“ค์›จ์–ด๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜๊ธฐ์— ์ˆœ์„œ๊ฐ€ ๊ต‰์žฅํžˆ ์ค‘์š”ํ•œ๋ฐ,

์ƒ๋‹จ ๋ถ€๋ถ„์„ ๋ณด๋ฉด First์™€ Second๋ฅผ ์ฝ˜์†”๋กœ ์ถœ๋ ฅํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์„ ์–ธ์‹ ํ•จ์ˆ˜ ๋งŒ๋“ค์–ด ๋†“์€๋’ค ์ƒ๋‹จ์˜ ๋‘๊ฐ€์ง€ ํ•จ์ˆ˜๊ฐ€ get ์š”์ฒญ ์‹œ ๋ฏธ๋“ค์›จ์–ด๋กœ ์‹คํ–‰๋˜๊ฒŒ ๋” ํ•ด๋†“์•˜๋‹ค.

๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด First, Second ์ˆœ์œผ๋กœ ์ž˜ ์ž‘๋™ํ•œ๊ฒƒ์„ ๋ณผ์ˆ˜์žˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ express๋ฅผ ์ ‘ํ•˜๊ฒŒ๋˜๋ฉด์„œ ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜๋ฅผ ๋œปํ•˜๋Š” app.use๋กœ ์‹œ์ž‘๋˜๋Š” ์ฝ”๋“œ๋ฅผ ๋งŽ์ด ๋ณด๊ฒŒ๋˜๋Š”๋ฐ,
์ด๋Š” ๊ฒฐ๊ตญ ์œ„์˜ ์„ค๋ช…์ฒ˜๋Ÿผ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ์˜ฌ๋•Œ๋งˆ๋‹ค ์ˆœ์„œ๋Œ€๋กœ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๊ฑฐ์น˜๋ฉฐ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์‘๋‹ต์„ ํ•˜๊ฒŒ๋œ๋‹ค.

๋˜ํ•œ Router ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๋ฉ”์ธ ํŒŒ์ผ์—์„œ ๋ถ„๋ฆฌ๋œ ๋ผ์šฐํ„ฐ๋˜ํ•œ (์ด๋Š” ๋‹ค์Œ์— ์ž์„ธํžˆ ๋‹ค๋ค„๋ณผ ์˜ˆ์ •์ด๋‹ค.) app.use, ์ฆ‰ ๋ฏธ๋“ค์›จ์–ด๋กœ ์ฒ˜๋ฆฌ๋˜๋Š”๊ฒƒ์ด๋‹ˆ "Express ๋Š” ์‚ฌ์‹ค์ƒ ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜์˜ ์—ฐ์†์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค" ๋Š” ๋ง์ด ๋”์šฑ ์™€๋‹ฟ๋Š”๊ฒƒ ๊ฐ™๋‹ค.

profile
Take me home~~~~
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€