๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป Dev/Back-End

express ๊ธฐ์ดˆ(2): URL ๋งค๊ฐœ๋ณ€์ˆ˜

yesolz 2024. 9. 3. 20:26
728x90

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ˜• ๋ณ€ํ™˜ (type conversion)

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ, ํ•จ์ˆ˜์™€ ์—ฐ์‚ฐ์ž์— ์ „๋‹ฌ๋˜๋Š” ๊ฐ’๋“ค์€ ๋Œ€๋ถ€๋ถ„ ์ ์ ˆํ•œ ์ž๋ฃŒํ˜•์œผ๋กœ ์ž๋™ ๋ณ€ํ™˜๋œ๋‹ค. 

let a = "5";
let b = "10";

// ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ ๋น„๊ตํ•จ
console.log(a > b); // false ("5"์™€ "10"์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ 5 > 10์„ ๋น„๊ต)
alert( "6" / "2" ); // 3, ๋ฌธ์ž์—ด์ด ์ˆซ์žํ˜•์œผ๋กœ ์ž๋™๋ณ€ํ™˜๋œ ํ›„ ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰
let result = 5 + "10"; // "510"์ด ๋จ

https://ko.javascript.info/type-conversions

 

ํ˜• ๋ณ€ํ™˜

 

ko.javascript.info

 

 

 

 

parseInt

์ž๋™์œผ๋กœ ํ˜• ๋ณ€ํ™˜์„ ํ•ด์ค„ ๋•Œ๊ฐ€ ๋งŽ์ง€๋งŒ, ์ฝ”๋“œ์˜ ๋ช…ํ™•์„ฑ๊ณผ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋™์ž‘์„ ์œ„ํ•ด ์ •์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” parseInt๋ฅผ ํ†ตํ•ด ๋ช…์‹œ์ ์œผ๋กœ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. 

let num = parseInt("10"); // 10
let num2 = parseInt("10px"); // 10
let num3 = parseInt("abc10"); // NaN
let binary = parseInt("1010", 2); // 2์ง„์ˆ˜ "1010"์„ 10์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ -> ๊ฒฐ๊ณผ๋Š” 10
let hexadecimal = parseInt("1F", 16); // 16์ง„์ˆ˜ "1F"๋ฅผ 10์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ -> ๊ฒฐ๊ณผ๋Š” 31

 

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด, ๋ฐฐ์—ด ๋น„๊ตฌ์กฐํ™”(Destructuring)

// ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์—ด ๋น„๊ตฌ์กฐํ™”
const array = [1, 2, 3, 4, 5];
const [, a, , b] = array;
console.log(a, b); // 2 4

๋ฐฐ์—ด ๋น„๊ตฌ์กฐํ™”๋Š” ์ˆœ์„œ์— ๋”ฐ๋ผ ๊ฐ’์„ ํ• ๋‹นํ•œ๋‹ค.

const keyboard = {
    brand: "Happy Hacking",
    model: "Professional 2",
    layout: "60%",
    switchType: "Topre",
};

// ๊ฐ์ฒด ๋น„๊ตฌ์กฐํ™”
const { brand, model, layout, switchType } = keyboard;

๊ฐ์ฒด ๋น„๊ตฌ์กฐํ™”์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ณ€์ˆ˜ ์ด๋ฆ„์€ ๊ฐ์ฒด์˜ ์†์„ฑ ์ด๋ฆ„(ํ‚ค)์™€ ์ •ํ™•ํžˆ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค.

 

URL ๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜ (req.params)

app.get('/keyboard/:brand', function (req, res) {
    const queryBrand = req.params.brand; // URL ๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ธŒ๋žœ๋“œ๋ฅผ ๋ฐ›์Œ
    // ... 
});

๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜(req.params): ๋ฐ์ดํ„ฐ๊ฐ€ URL์˜ ์ผ๋ถ€๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

๊ฒฝ๋กœ ์ž์ฒด๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ์กฐ์ ์œผ๋กœ ๋” ๋ช…ํ™•ํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. 

 

URL ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜ (req.query)

app.get('/keyboard', function (req, res) {
    const queryBrand = req.query.brand; // URL ์ฟผ๋ฆฌ๋กœ ๋ธŒ๋žœ๋“œ๋ฅผ ๋ฐ›์Œ
	...
});

/keyboard/brand=HappyHacking

app.get('/search', function (req, res) {
    const query = req.query.q;
    const page = req.query.page || 1; // ๊ธฐ๋ณธ๊ฐ’ 1
    const limit = req.query.limit || 10; // ๊ธฐ๋ณธ๊ฐ’ 10

    res.json({
        searchQuery: query,
        page: page,
        limit: limit
    });
});

๋ฐ์ดํ„ฐ๊ฐ€ URL ๊ฒฝ๋กœ ๋’ค์— ?๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์˜ ํ˜•ํƒœ๋กœ ์ „๋‹ฌ๋œ๋‹ค.

๋ณต์ˆ˜์˜ ํ•„ํ„ฐ๋‚˜ ๊ฒ€์ƒ‰ ์กฐ๊ฑด ๋“ฑ์„ ์ „๋‹ฌํ•  ๋•Œ ์œ ์šฉํ•˜๊ณ , ๊ฒฝ๋กœ๊ฐ€ ์ •์ ์ด๋ฉด์„œ๋„ ์ถ”๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ๋ง๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค.

 

req.query๋Š” Expree.js์—์„œ URL์˜ ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ์ œ๊ณตํ•œ๋‹ค.

http://localhost:3000/search?q=keyboard&page=2

์ด ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฐ์ฒด๋กœ ํ‘œํ˜„๋œ๋‹ค. (์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์„ ํŒŒ์‹ฑํ•œ ๊ฒฐ๊ณผ์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด)

{
    q: "keyboard",
    page: "2"
}

 

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋„ค์ด๋ฐ ์ผ€์ด์Šค

  • [kebab-case] cf. snake_case // ๋‘˜์ค‘ ํ•˜๋‚˜๋กœ. ํ†ต์ผ
    • ํด๋”, ํŒŒ์ผ
  • [camelCase]
    • ๋ณ€์ˆ˜, ํ•จ์ˆ˜
  • [PascalCase]
    • ํด๋ž˜์Šค

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Map

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Map ๊ฐ์ฒด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ์ด๋‹ค. 

ํŠน์ง•

  • ๋ชจ๋“  ์ž๋ฃŒํ˜•(์ˆซ์ž, ๋ฌธ์ž์—ด, ๊ฐ์ฒด ๋“ฑ)์„ ํ‚ค๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ (์ผ๋ฐ˜์ ์ธ ๊ฐ์ฒด {}๋Š” 
  • ์‚ฝ์ž…๋œ ์ˆœ์„œ ์œ ์ง€: ๋ฐ˜๋ณต๋ฌธ (for...of ๋˜๋Š” forEach)๋ฅผ ํ†ตํ•ด ์ˆœํšŒ ์‹œ ์‚ฝ์ž…๋œ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ˜ํ™˜
  • ํ‚ค ๋น„๊ต์˜ ์—„๊ฒฉํ•จ : ์ˆซ์ž 1๊ณผ ๋ฌธ์ž์—ด 1์„ ์„œ๋กœ ๋‹ค๋ฅธ ํ‚ค๋กœ ๊ตฌ๋ถ„ํ•จ. 
const myMap = new Map();

// ํ‚ค-๊ฐ’ ์Œ ์ถ”๊ฐ€
myMap.set(1, "Number One");      // ์ˆซ์ž ํ‚ค
myMap.set("1", "String One");    // ๋ฌธ์ž์—ด ํ‚ค
myMap.set(true, "Boolean True"); // ๋ถˆ๋ฆฌ์–ธ ํ‚ค
myMap.set({ name: "Alice" }, "Object Value"); // ๊ฐ์ฒด ํ‚ค

// ํ‚ค-๊ฐ’ ์Œ ์กฐํšŒ
console.log(myMap.get(1)); // "Number One"
console.log(myMap.get("1")); // "String One"
console.log(myMap.get(true)); // "Boolean True"

// Map ํฌ๊ธฐ ํ™•์ธ
console.log(myMap.size); // 4

// Map ์ˆœํšŒ
myMap.forEach((value, key) => {
    console.log(`Key: ${key}, Value: ${value}`);
});

 

 

728x90