🎯 URL νŒŒλΌλ―Έν„°μ™€ 쿼리λ₯Ό ν™œμš©ν•˜μ—¬ Map 객체둜 동적 데이터 관리λ₯Ό ν•™μŠ΅ν•©λ‹ˆλ‹€.


πŸ“™ Today I Learned

Express μš”μ²­ 처리 및 URL νŒŒλΌλ―Έν„° ν™œμš©

URL νŒŒλΌλ―Έν„°λ‘œ 데이터 전달

express 예제 μ½”λ“œμ—μ„œ req.params.n은 λ¬Έμžμ—΄λ‘œ 좜λ ₯λ©λ‹ˆλ‹€.

const express = require('express');
const app = express();

app.get('/products/:n', function (req, res) {
  console.log(req.params);
  console.log(req.params.n);
  res.json({
    num: req.params.n,
  });
});

app.listen(3000);




🚨 EADDRINUSE 였λ₯˜ λ°œμƒ 및 ν•΄κ²°

λ‹€μ‹œ μ½”λ“œλ₯Ό μ‹€ν–‰μ‹œμΌ°λ”λ‹ˆ κ°‘μžκΈ° 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. 😦

⚠️ λ°œμƒν•œ 였λ₯˜

μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ‹ˆ Error: listen EADDRINUSE: address already in use :::3000 λΌλŠ” 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή 포트 λ²ˆν˜Έκ°€ 이미 μ‚¬μš© 쀑이기 λ•Œλ¬Έμ— μ‚¬μš©ν•˜μ§€ λͺ» ν•œλ‹€λŠ” μ˜λ―Έμ˜€μŠ΅λ‹ˆλ‹€.

πŸ’‘ ν•΄κ²° κ³Όμ • 1 ( Windows ν•΄κ²° 방법 )

1️⃣ ν¬νŠΈλ„˜λ²„μ— ν•΄λ‹Ήν•˜λŠ” λ„€νŠΈμ›Œν¬ μƒνƒœλ₯Ό ν‘œν˜„ν•΄λ‹¬λΌκ³  μš”μ²­ν•˜κΈ°

netstat -ano | findstr :<ν¬νŠΈλ„˜λ²„>

2️⃣ ν•΄λ‹Ή ν¬νŠΈμ—μ„œ μ‚¬μš© 쀑인 ν”„λ‘œμ„ΈμŠ€ κ°•μ œ μ’…λ£Œν•˜κΈ°

taskkill /PID <ν”„λ‘œμ„ΈμŠ€ID> /F

| ν”„λ‘œν† μ½œ | 둜컬 μ£Όμ†Œ | 원격 μ£Όμ†Œ | μƒνƒœ | PID |

β‡’ 이λ₯Ό ν†΅ν•΄μ„œ 문제λ₯Ό ν•΄κ²°ν•˜μ˜€μŠ΅λ‹ˆλ‹€.😊


πŸ’‘ ν•΄κ²° κ³Όμ • 2
μš”μ²­ν•˜λŠ” 포트 번호λ₯Ό λ³€κ²½ν•΄μ„œ μš”μ²­ν•˜κΈ°
app.listen(1234);




req.params.n의 μ—°μ‚° 적용

req.param.n을 연산식에 λ„£μ–΄ μ‹€ν–‰ν•˜λ©΄ 숫자둜 κ°•μ œ λ³€ν™˜λœ 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

const express = require('express');
const app = express();

app.get('/products/:n', function (req, res) {
  let number = req.params.n - 10;
  console.log(number);

  res.json({
    num: number,
  });
});

app.listen(3000);

μžλ™ ν˜•λ³€ν™˜ (Type coercion)
데이터 νƒ€μž…μ—μ„œ λ‹€λ₯Έ 데이터 νƒ€μž…μœΌλ‘œ 값을 μžλ™μœΌλ‘œ λ³€ν™˜λ˜λŠ” ν˜„μƒμ„ λ§ν•©λ‹ˆλ‹€.

const value1 = "5";
const value2 = 9;
let sum = value1 + value2;

console.log(sum); // 59 (string)



parseInt()둜 숫자 λ³€ν™˜

이λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•˜μ—¬ parseInt() 둜 λ¬Έμžμ—΄μ„ 숫자둜 λ°”κΎΈμ–΄ μ—°μ‚°ν•©λ‹ˆλ‹€.

const express = require('express');
const app = express();

app.get('/products/:n', function (req, res) {
  let number = parseInt(req.params.n) - 10;
  console.log(number);

  if (number > 5) {
    console.log('url둜 전달받은 μˆ«μžκ°€ 10보닀 ν¬λ„€μš”.');
  }

  res.json({
    num: number,
  });
});

app.listen(3000);

좜λ ₯ κ²°κ³Ό value값도 숫자둜 ν‘œν˜„λœ 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.



μ‹€μ „ 예제 : 유튜브 URL

app.get('/:nickname', function (req, res) {
  res.json({
	channel: req.params.nickname,
  });
});


app.get('/watch', function (req, res) {
  const q = req.query;
  console.log(q);
  res.json({ });
});


  • 객체의 비ꡬ쑰화λ₯Ό ν™œμš©ν•˜μ—¬ 좜λ ₯
app.get('/watch', function (req, res) {
  const { v, t } = req.query;
  res.json({
    video: v,
    timeline: t,
  });
});

객체와 λ°°μ—΄μ˜ ꡬ쑰 λΆ„ν•΄ ν• λ‹Ή(Destructuring assignment)

βœ… 객체의 비ꡬ쑰화

const { v, t } = req.query;
//const v = req.query.v; 
//const t = req.query.t;

βœ… λ°°μ—΄μ˜ 비ꡬ쑰화

const array = [1, 2, 3, 4, 5];
const [, num2, num3, , num5 ] = array;
console.log(num2, num3, num5); // 2, 3, 5



Map 객체λ₯Ό ν™œμš©ν•œ 데이터 관리

Map 객체λ₯Ό μ‚¬μš©ν•˜μ—¬ νŠΉμ • id에 ν•΄λ‹Ήν•˜λŠ” μƒν’ˆ 정보λ₯Ό λ°˜ν™˜ν•˜λŠ” APIλ₯Ό κ΅¬ν˜„ν•©λ‹ˆλ‹€.

const express = require('express');
const app = express();
app.listen(3000);

app.get('/:id', function (req, res) {
  let { id } = req.params;
  id = parseInt(id);
  if (db.get(id) === undefined) {
    res.json({
      message: 'μ—†λŠ” μƒν’ˆμž…λ‹ˆλ‹€.',
    });
  } else {
    res.json({ id: id, productName: db.get(id) });
  }
});

let db = new Map();
db.set(1, 'NoteBook');
db.set(2, 'Cup');
db.set(3, 'Chair'); 
console.log(db); // { 1 => 'NoteBook', 2 => 'Cup', 3=> 'Chair' }
  • req.params.idλ₯Ό κ°€μ Έμ˜¬ λ•Œ idλŠ” λ¬Έμžμ—΄μ΄κΈ° λ•Œλ¬Έμ— parseInt()λ₯Ό μ‚¬μš©ν•˜μ—¬ 숫자둜 λ³€ν™˜ν•©λ‹ˆλ‹€.
  • db.get(id)λ₯Ό μ΄μš©ν•΄ ν•΄λ‹Ή id의 μƒν’ˆλͺ…을 μ‘°νšŒν•˜κ³ , JSON 응닡을 λ³΄λƒ…λ‹ˆλ‹€.
  • Map 객체에 μ €μž₯λ˜μ§€ μ•Šμ€ 값이 μš”μ²­λ˜λ©΄, if문을 톡해 'μ—†λŠ” μƒν’ˆμž…λ‹ˆλ‹€'κ°€ 좜λ ₯λ©λ‹ˆλ‹€.

Map 객체

  • ν‚€-κ°’(key-value) μŒμ„ μ €μž₯ν•˜λŠ” JavaScript λ‚΄μž₯ κ°μ²΄μž…λ‹ˆλ‹€.
  • Object와 λ‹€λ₯΄κ²Œ ν‚€μ˜ νƒ€μž… μ œν•œμ΄ μ—†μŠ΅λ‹ˆλ‹€.
  • .set()으둜 값을 μΆ”κ°€ν•©λ‹ˆλ‹€.
  • .get()으둜 값을 κ°€μ Έμ˜΅λ‹ˆλ‹€.
  • .size둜 크기λ₯Ό κ°€μ Έμ˜΅λ‹ˆλ‹€.



μΆ”κ°€ κ°œλ… : 넀이밍 κ·œμΉ™

🍒kebab-case (λ˜λŠ” 🐍snake_case)

  • λŒ€μƒ : 폴더, 파일
  • κ·œμΉ™
    • μ•ŒνŒŒλ²³ μ†Œλ¬Έμžλ‘œ μž‘μ„±ν•©λ‹ˆλ‹€.
    • 두 개 μ΄μƒμ˜ 단어λ₯Ό 합쳐 μ“Έ λ•Œ ν•˜μ΄ν”ˆ(-)을 μ‚¬μš©ν•©λ‹ˆλ‹€.
  • μ˜ˆμ‹œ : project-demo

πŸͺcamelCase

  • λŒ€μƒ : λ³€μˆ˜, ν•¨μˆ˜
  • κ·œμΉ™
    • 첫 λ‹¨μ–΄λŠ” μ†Œλ¬Έμž 이후 λ‹¨μ–΄λŠ” λŒ€λ¬Έμžλ‘œ μž‘μ„±ν•©λ‹ˆλ‹€.
    • 곡백 없이 μ΄μ–΄μ„œ μž‘μ„±ν•©λ‹ˆλ‹€.
  • μ˜ˆμ‹œ : getName()

πŸ§‘PascalCase

  • λŒ€μƒ : 클래슀
  • κ·œμΉ™
    • 첫 단어 λŒ€λ¬Έμž 이후 단어 λ˜ν•œ λŒ€λ¬Έμžλ‘œ μž‘μ„±ν•©λ‹ˆλ‹€.
    • 곡백 없이 μ΄μ–΄μ„œ μž‘μ„±ν•©λ‹ˆλ‹€.
  • μ˜ˆμ‹œ : UserModel



✏️ ν•œ 쀄 회고

μ‹€μ œ 유튜브 URL을 ν™œμš©ν•˜λ©΄μ„œ μžλ™ ν˜•λ³€ν™˜ λ“± 많이 κ³ λ €ν•΄μ•Ό ν•  점을 이해할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.πŸ˜€

profile
🌱개발 기둝μž₯

0개의 λŒ“κΈ€