[๐Ÿ’ป ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE 44๊ธฐ] Refactor Express, Middleware

JiEunยท2023๋…„ 4์›” 5์ผ
0
post-thumbnail

โœ”๏ธ ์‹œ์ž‘

Express, ๋ฏธ๋“ค์›จ์–ด, req.query, req.params, req.body๋ฅผ ์ด์šฉํ•œ ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค.


๐Ÿ“ ์•Œ๊ฒŒ๋œ ๋ถ€๋ถ„

โœ”๏ธ Express

  • ์›น ๋ฐ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ์ผ๋ จ์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ฐ„๊ฒฐํ•˜๊ณ  ์œ ์—ฐํ•œ Node.js ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ
  • Express๋Š” ํ”„๋ ˆ์ž„ ์›Œํฌ ์ž์ฒด์—์„œ ๋ผ์šฐํ„ฐ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

๋ผ์šฐํŒ…

  • URI(๋˜๋Š” ๊ฒฝ๋กœ) ๋ฐ ํŠน์ •ํ•œ HTTP ์š”์ฒญ ๋ฉ”์†Œ๋“œ์ธ ํŠน์ • ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•œ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‘๋‹ตํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ
app.METHOD(PATH, HANDLER)

โœ”๏ธ Middleware(๋ฏธ๋“ค์›จ์–ด)

  • ์ž๋™์ฐจ ๊ณต์žฅ์˜ ๊ณต์ •๊ณผ ๋น„์Šทํ•˜๋‹ค.
  • ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ ์œ„์— ์˜ฌ๋ผ๊ฐ€ ์žˆ๋Š” ์š”์ฒญ(Request)์— ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ๋”ํ•˜๊ฑฐ๋‚˜, ๋ฌธ์ œ๊ฐ€ ๋ฐœ๊ฒฌ๋œ ๋ถˆ๋Ÿ‰ํ’ˆ์„ ๋ฐ–์œผ๋กœ ๊ฑท์–ด๋‚ด๋Š” ์—ญํ•  (ํ”ผํ„ฐ๋ง)
  • express์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์ด๋‹ค.

- ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ

  1. POST ์š”์ฒญ ๋“ฑ์— ํฌํ•จ๋œ body(payload)๋ฅผ ๊ตฌ์กฐํ™”ํ•  ๋•Œ(์‰ฝ๊ฒŒ ์–ป์œผ๋ ค๊ณ  ํ•  ๋•Œ)
  2. ๋ชจ๋“  ์š”์ฒญ/์‘๋‹ต์— CORS ํ—ค๋”๋ฅด ๋ถ™์—ฌ์•ผํ•  ๋•Œ
  3. ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด url์ด๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ™•์ผํ•  ๋•Œ
  4. ์š”์ฒญ ํ—ค๋”์— ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š”์ง€ ํ™•์ธํ•  ๋•Œ
  • Express๋‚ด์žฅ ๋ฏธ๋“ค์›จ์–ด์ธ express.json์„ ์ด์šฉํ•˜๋ฉด ์š”์ฒญ body(payload)๋ฅผ ๋ฐ›๋Š” ์ž‘์—…์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ”๏ธ req.query, req.params, req.body

  • Express.js์—์„œ HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด ์†์„ฑ

req.query

  • HTTP ์š”์ฒญ url์˜ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๊ฐ์ฒด
  • ? ๋’ค์— ํ‚ค/๊ฐ’ ์Œ์œผ๋กœ ์ง€์ •๋˜๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜ (/user?name=jieun => req.query.name = 'jieun')
// https://www.Jieun.com/user?name=jieun&age=27
app.get('/:id', (req, res) => {
	console.log(req.query) // {name : 'jieun', age : '27'}
})

req.params

  • HTTP ์š”์ฒญ url์˜ ๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๊ฐ์ฒด
  • url ๊ฒฝ๋กœ์˜ ํŠน์ • ๋ถ€๋ถ„์— ์ง€์ •๋˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ (/user/:id => req.params.id = id ๋ถ€๋ถ„์˜ ๋Œ€ํ•œ ๊ฐ’)
// https://www.Jieun.com/user?name=jieun&age=27
app.get('/:id', (req, res) => {
	console.log(req.params) // {id : 'name'}
})

req.body

  • HTTP POST ์š”์ฒญ ๋ณธ๋ฌธ์— ๋Œ€ํ•œ ๊ฐ์ฒด
  • POST ์š”์ฒญ์—์„œ ์ „๋‹ฌ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ถ€๋ถ„
  • ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํ˜•์‹(JSON, URL ์ด์ฝ”๋”ฉ ๋“ฑ)์— ๋Œ€ํ•ด ์ž๋™์œผ๋กœ ๊ตฌ๋ฌธ ๋ถ„์„

โœ๏ธ ๋งˆ์น˜๋ฉฐ

์ด๋ก  ๋“ฑ์„ ๋ณด๋ฉด ์•„~ ์ด๋ž˜์„œ ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ๋‚˜ ํ•˜๊ณ  ์ดํ•ด๊ฐ€ ๋˜๋Š” ๋“ฏ ์‹ถ์–ด๋„
๋ง‰์ƒ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋จธ๋ฆฌ๊ฐ€ ํ……ํ…… ๋นˆ๋‹ค..

์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๋ ค๋ฉด ๊ธ€๋กœ๋งŒ ์ž‘์„ฑํ•˜๋Š”๊ฒŒ ์•„๋‹Œ ์ฝ”๋“œ๋ฅผ ๋”ฐ๋ผ ์น˜๋ฉด์„œ
์™œ ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๊ณ  ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—” ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๋Š”์ง€๋ฅผ ์•Œ์•„์•ผ ํ•  ๊ฑฐ ๊ฐ™๋‹ค.

์ฐธ๊ณ 
https://expressjs.com/ko/starter/basic-routing.html
chat gpt

profile
๐Ÿ’ป ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋ชฉํ‘œ๋กœ ์„ฑ์žฅ ์ค‘! (์•Œ์•„๋ดค๋˜ ๋‚ด์šฉ ๋“ฑ์„ ์ •๋ฆฌํ•˜๊ธฐ)

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