2024년 9월 2일
// params-demo.js
const express = require('express');
const app = express();
app.listen(1234);
app.get('/products/:n', funtion(req, res) {
res.json({
num : req.params.n
})
})
app.get('/test/1', function(req, res) {
res.json({
test: 1
})
})
: 저 위의 코드를 가지고 서버를 구동시키면 어떻게 화면이 출력될까?
분명 숫자로 들어왔는데 문자로 인식하는 것을 볼 수 있다.
자바스크립트는 자료형을 신경 쓰는 언어가 아니다.(= 자료형을 구분하는 것을 중요하게 생각하지 않음)
만약, 연산을 하기 위해 params의 n을 이용해 if (req.params.n > 10) {console.log(”url로 전달받은 숫자가 10보다 크네요”)}라는 코드를 추가하면 콘솔창에 if문의 문구가 찍힌 것을 볼 수 있다. 화면에서는 분명 문자열이라고 출력했는데 if문에서는 숫자로 판단해 콘솔창에 문구가 찍힌다.
이 말은, 문자열 10과 숫자 10을 구분하지 못한다는 것인데, 이것은 자바스크립트의 특징 중 하나이다. 다른 언어에서는 불가능한 이야기이다. 따라서, 우리는 다른 언어를 나중에 사용할 확률도 높고 오류를 막기 위해 보수적으로 생각해야한다.
그렇기 때문에,
: 정수로 만들어주는 함수
를 사용 해야한다.
// params-demo.js
const express = require('express');
const app = express();
app.listen(1234);
app.get('/products/:n', funtion(req, res) {
let number = parseInt(req.params.n) - 10;
console.log(number)
res.json({
num : number
})
})
app.get('/test/1', function(req, res) {
res.json({
test: 1
})
})
http://localhost:1234/products/20 접속 -> 콘솔창에 { "number" : 10 }이 찍혀 숫자로 잘 인식할 수 있다는 것을 알 수 있다.
이처럼 자바스크립트는 문자열과 숫자의 데이터 타입을 확실히 구분하지 않기 때문에 parseInt()를 사용해야한다!!
: 우리는 유튜브의 각 채널을 클릭해서 url을 보면 닉네임으로 각 채널을 나타내는 것을 볼 수 있다.
ex)
https://www.youtube.com/@DingoMusic
이를 이용해서 api를 작성해보면,
// params-demo.js
... 생략 ...
app.get('/:nickname', function(req, res) {
res.json({
channel : req.params.nickname
})
})
결과 화면
정리(고도화)해보면 -> 변수로 빼서 더 단결하게 바꿔보자
: param이라는 변수를 선언해 사용하기 편하게 만드는게 좋다.
// params-demo.js
... 생략 ...
app.get('/:nickname', function(req, res) {
const param = req.params
res.json({
channel : param.nickname
})
})
: https://www.youtube.com/watch?v=6RQ-bBdASvk&t=945s
위의 주소를 보면, ? 다음에 v=영상코드&t=시간 의 형태를 볼 수 있다.
*?는 쿼리스트링으로 파라미터를 받는다는 의미임
위에서 파라미터를 고도화한것처럼 쿼리도 고도화해서 작성해보면,
// params-demo.js
... 생략 ...
// 영상 타임 라인 주소 : https://www.youtube.com/watch?v=6RQ-bBdASvk&t=945s
app.get('/watch', function(req, res) {
const q = req.query;
consoel.log(q);
res.json({
})
})
http://localhost:1234/watch?v=6RQ-bBdASvk&t=945s 접속 -> { v: ‘6RQ-bBdASvk’, t:’945s’ }를 콘솔창에서 확인할 수 있음
그런데, 이미 q는 json형태이므로, 화면에 출력하기 위해서 변수 q만 json으로 넘겨줄 수 있다. 그리고 키를 지정해서 알아보기 쉬운 json 형태를 만든다.
// params-demo.js
... 생략 ...
// 영상 타임 라인 주소 : https://www.youtube.com/watch?v=6RQ-bBdASvk&t=945s
app.get('/watch', function(req, res) {
const q = req.query;
res.json({
video : q.v,
timeline : q.t
})
})
: const {변수이름1, 변수이름2} = 객체
의 형태
// params-demo.js
... 생략 ...
app.get('/watch', function(req, res) {
const {v, t} = req.query;
res.json({
video : v,
timeline : t
})
})
결과 화면
: const [변수이름1, 변수이름2] = 배열
의 형태
// array-demo.js
const array = [1, 2, 3, 4, 5];
const [ , num2, num3, , num5] = array;
console.log(num2); // 2
console.log(num3); // 3
console.log(num5); // 5
결과 화면
// object-api-demo.js
const express = require('express');
const app = express();
app.listen(1234);
app.get('/:nickname', function(req, res) {
const {nickname} = req.params;
res.json({
channel : nickname
})
})
// object-api-demo.js
const express = require('express');
const app = express();
app.listen(1234);
let youtuber1 = {
channelTitle : "떼껄룩",
subscribers : "186만명",
videoNumbers : "371개"
}
let youtuber2 = {
channelTitle : "딩고뮤직",
subscribers : "507만명",
videoNumbers : "2.5천개"
}
let youtuber3 = {
channelTitle : "원지의하루",
subscribers : "95.9만명",
videoNumbers : "308개"
}
app.get('/:nickname', function(req, res) {
const {nickname} = req.params;
if(nickname == "@takealook") {
res.json(youtuber1)
} else if(nickname == "@DingoMusic") {
res.json(youtuber2)
} else if(nickname == "@im1G") {
res.json(youtuber3)
} else {
res.json({
message : "Not Found"
})
}
})
결과 화면
kebab-case
camel-case
pascal-case
snake-case
각 상황에 맞게 통일해서 사용할 것
// map-demo.js
let db = new Map();
db.set(1, "NoteBook");
db.set(2, "Cup");
db.set(3, "Chair");
console.log(db); // Map(3) { 1 => 'NoteBook', 2 => 'Cup', 3 => 'Chair' }
console.log(db.get(1)); // NoteBook
console.log(db.get(2)); // Cup
console.log(db.get(3)); // Chair
// 키로 밸류를 찾을 수 있는 한 쌍을 저장
❗️ 신입 사원 역량으로 반드시 알아야 하는 자료구조 : Map, List
// map-demo.js
const express = require('expess');
const app = express();
app.listen(1234);
app.get('/', function(req, res) {
res.send('Hello World');
})
// localhost:1234/1 => NoteBook
// localhost:1234/2 => Cup
// localhost:1234/3 => Chair
app.get('/:id', function(req, res) {
let {id} = req.params;
console.log(id); // url에 적은 숫자 나옴
console.log(db.get(id)); // undefined why? map은 문자열과 숫자를 구분
// 숫자로 바꿔야함
id = parseInt(id);
if(db.get(id) == undefined) { // 문자열 "undefined"하면 콘솔창에 아무것도 나오지 않음
req.json({
message : "없는 상품입니다."
});
} else {
res.json({
id: id,
productName : db.get(id)
})
}
// else문 안쓰고 한 줄 띄어서 if문만 쓰면 에러 나옴 json으로 이미 한번
// 보냈는데 왜 또 보냈냐고 에러 생김
// 프로그래밍의 안정성을 위해서 else문 써야함
})
let db = new Map();
db.set(1, "NoteBook");
db.set(2, "Cup");
db.set(3, "Chair");
결과 화면