const express = require('express');
const app = express();
app.get('/:nickname', function (req, res) {
res.json({
channel : req.params.nickname
})
});
app.listen(3000);

express 에서는 파라미터를 request 의 params 에서 추출해낼 수 있어요.
js에서는 string을 number로 변경하려면 parseInt(), Number(), 혹은 + 를 사용할 수 있어요.
let strNum = '123';
console.log(typeof strNum);
// 1. Number()
console.log(typeof Number(strNum));
// 2. parseInt()
console.log(typeof parseInt(strNum));
Express에서 쿼리 스트링 값을 받아올 때 다음과 같이 해요.
app.get('/watch', function (req, res) {
const query = req.query;
console.log(query);
res.json({
query,
})
});
Params를 받아올 때처럼 쿼리 또한 request.query 를 통해 받아올 수 있어요.
app.get('/watch', function (req, res) {
const query = req.query;
console.log(query);
res.json({
'영상 코드' : query.v,
'시작 지점' : query.t,
})
});

이 예제의 query.v처럼 쿼리의 속성에 직접 접근할 수도 있어요.
let youtuber1 = {
channelTitle: "십오야",
sub: "593만명",
videoNum: "993개"
}
let youtuber2 = {
channelTitle: "침착맨",
sub: "223만명",
videoNum: "6600개"
}
let youtuber3 = {
channelTitle: "레니아워",
sub: "20만명",
videoNum: "123개"
}
app.get('/watch', function (req, res) {
const { nickname } = req.query;
if (nickname == "십오야") {
res.json(youtuber1);
}
if (nickname == "침착맨") {
res.json(youtuber2);
}
if (nickname == "레니아워") {
res.json(youtuber3);
}
res.json({
message: "알 수 없는 유튜버입니다."
});
});
익숙해졌다면 다음과 같이
객체를 생성한 것을 res.json 으로 return하는
실습도 해볼 수 있어요.

import express from 'express';
const app = express();
app.listen(3000);
let db = new Map();
db.set(1, 'John'); // key로 value를 찾을 수 있는 한 쌍
db.set(2, 'Peter');
db.set(3, 'Amy');
app.get('/:id', function (req, res) {
const { id } = req.params;
// 예외처리
if (!db.has(+id)) {
return res.status(404).json({ message: 'Not found' });
}
res.json({
id,
name: db.get(+id),
});
})
})

다음과 같이 params로 들어온 id를 +로 숫자로 변경하여 db에서 데이터를 조회, 돌려줬어요.
JS에서 사용하면 편리한 기능을 설명하고 넘어갈게요
구조 분해 할당이란 배열이나 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 하는 Javascript의 표현식
구조 분해 할당을 통해 객체나 배열의 요소에 좀 더 쉽게 접근할 수 있어요.
배열의 경우 index를 통한 접근이 아닌 직접 변수명을 바로 붙여 사용할 수 있고, 객체의 경우 내부에 있는 키 이름을 통해 바로 사용할 수도 있어요.
app.get('/watch', function (req, res) {
const query = req.query;
const { v,t } = query;
console.log(v);
console.log(t);
res.json({
video: v,
time: t
})
});

이렇게 괄호를 열어 속성을 빼올 수 있어요.
(라이브러리 import 할 때처럼 속성명이 같아야해요)
const array = [1, 2, 3, 4, 5];
const [a, b, c, d, e] = array;
console.log(a, b, c, d, e);
const Arr = [1,2,3,4,5];
let [index1, index2, , ...rest] = Arr;
console.log(index1); // 첫 번째 요소 가져오기 // 1
console.log(index2); // 두 번째 요소 가져오기 // 2
console.log(rest); // 네 번째, 다섯 번째 요소 가져오기 //[4,5]
배열은 순서가 가장 중요해요.
JS의 Map은 키-값을 사용해 데이터를 저장합니다.
Object로 키-값으로 데이터를 저장하는데 왜 이름이 다를까요?
둘의 차이점을 알아보겠습니다.
// Object
const obj = {
key : 'value'
};
// get
console.log(obj.key); // value
console.log(obj['key']); // value
// set
obj['newkey'] = 'newvalue';
obj.newkey = 'newvalue';
// Map
let db = new Map();
db.set(1, 'John'); // key로 value를 찾을 수 있는 한 쌍
db.set(2, 'Peter');
db.set(3, 'Amy');
console.log(db); Map(3) // { 1 => 'John', 2 => 'Peter', 3 => 'Amy' }
console.log(db.get(2)); // Peter
db.set(2, 'Jack');
console.log(db.get(2)); // Jack
Map과 Object 중 무엇을 사용할지 고민하는 경우
각 개별 요소에 대해 적용해야 하는 로직이 있는 경우 Object 사용
실행 시까지 키를 알 수 없고, 모든 키가 동일한 type이며 모든 값들이 동일한 type일 경우 Map을 사용해봅시다.
파일, 변수, 폴더, 함수 등 이름이 필요한 곳이 많습니다.
그런데 이 이름들이 통일성이 없고 본인이 원하는 대로 만들어지면 어떻게 될까요?
찾으려고 하는 것을 찾기 힘들뿐더러 하나의 파일을 읽기도 힘들 겁니다.
그렇기에 네이밍 규칙이라는 것이 있습니다.
camelCase : 두 번째 이상의 단어는 첫 글자를 대문자로 사용한다.
PascalCase : camelCase에서 첫 번째 단어의 첫 글자도 대문자로 사용한다.
snake_case : _(언더바)를 이용해 단어를 구분한다.
kebab-case : -(하이픈)을 이용해 단어를 구분한다.