Post

데브코스 TIL - Day 17

23년 12월 11일 강의를 들은 내용과 추가로 더 학습한 내용을 기록한 글입니다.

POST

생성(등록)해주는 HTTP METHOD id, password, name, email, contact와 같은 개인정보는 숨겨서 보내는 것이 좋음

실습 - postman 사용해서 http method 사용해보기

GET

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const express = require("express");
const app = express();

app.listen(3000);

const db = new Map();

const youtuber1 = {
  channelTitle: "십오야",
  subscriber: 5930000,
  videoNum: 993
};
const youtuber2 = {
  channelTitle: "뜬뜬",
  subscriber: 1510000,
  videoNum: 168
};

db.set(1, youtuber1);
db.set(2, youtuber2);

app.get("/youtuber/:id", function (req, res) {
  const { id } = req.params;
  const youtuber = db.get(parseInt(id));
  console.log(id);
  if (!youtuber) {
    res.send("찾을 수 없는 유튜버입니다.");
  } else {
    res.send(youtuber);
  }
});

결과

POST

1
2
3
4
5
app.use(express.json());

app.post("/test", (req, res) => {
  res.send(req.body);
});

결과

실습 2 - postman 사용해서 새로운 youtuber 생성하기

기존 유튜버 데모

  • 기존 유튜버 2명의 정보만 반환할 수 있었고, 새로운 유튜버를 등록할 수 없었음
  • id가 1,2인 유튜버에 대한 api만 가지고 있음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// express 모듈 셋팅
const express = require("express");
const app = express();

app.listen(3000);

//  데이터 세팅
const db = new Map();

const youtuber1 = {
  channelTitle: "십오야",
  subscriber: 5930000,
  videoNum: 993
};
const youtuber2 = {
  channelTitle: "뜬뜬",
  subscriber: 1510000,
  videoNum: 168
};

db.set(1, youtuber1);
db.set(2, youtuber2);

app.get("/youtuber/:id", function (req, res) {
  const { id } = req.params;
  const youtuber = db.get(parseInt(id));
  console.log(id);
  if (!youtuber) {
    res.send("찾을 수 없는 유튜버입니다.");
  } else {
    res.send(youtuber);
  }
});

결과 postman get postman get_youtuber postman get_youtuber1

API 설계하고, 사용하기

API 설계

1. 개별 조회 (GET)

  • /youtubers/:id
    • id로 map에서 객체를 찾아서, 그 객체의 정보를 뿌려짐
    • req: url.params.id ← map에 저장된 key값을 전달
    • res: map에서 id로 객체를 조회해서 전달

2. 등록 (POST)

  • /youtubers
    • req: body ← channelTitle, sub =0,vidioNum=0 신규 유튜버 정보를 전달
    • res: ‘channelTitle님, 유튜버가 되신걸 환영합니다!’

3. 전체 조회 (GET)

  • /youtubers
    • req: X
    • res: map을 전체 조회

실습 2 - 등록하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// express 모듈 셋팅
const express = require("express");
const app = express();

app.listen(3000);

//  데이터 세팅
const db = new Map();

const youtuber1 = {
  channelTitle: "십오야",
  subscriber: 5930000,
  videoNum: 993
};
const youtuber2 = {
  channelTitle: "뜬뜬",
  subscriber: 1510000,
  videoNum: 168
};

db.set(1, youtuber1);
db.set(2, youtuber2);

app.use(express.json()); // http 외 모듈인 '미들웨어':json 설정

app.post("/youtubers", (req, res) => {
  const { channelTitle } = req.body;
  db.set(4, { channelTitle, sub: 0, videoNum: 0 });
  res.send({
    message: `${db.get(4).channelTitle}님, 유튜버가 되신걸 환영합니다!`
  });
});

결과 postman post_newYoutuber postman_post_get_newyoutuber

코드 고도화하기

아이디 값을 변수로 설정해서, 자동으로 id 값이 플러스되도록 하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var id = 1;

const youtuber1 = {
  channelTitle: "십오야",
  subscriber: 5930000,
  videoNum: 993
};
const youtuber2 = {
  channelTitle: "뜬뜬",
  subscriber: 1510000,
  videoNum: 168
};

db.set(id++, youtuber1);
db.set(id++, youtuber2);
app.use(express.json()); // http 외 모듈인 '미들웨어':json 설정

app.post("/youtubers", (req, res) => {
  const { channelTitle } = req.body;
  db.set(id++, { channelTitle, sub: 0, videoNum: 0 });
  res.send({
    message: `${db.get(id - 1).channelTitle}님, 유튜버가 되신걸 환영합니다!`
  });
});

결과

이 이22

박 Alt text

실습 3 - 전체 조회

강의는 api를 설계하는 것에서 끝났는데, 나는 map Object를 Object로 변환하여 출력하면 될 것 같다고 생각하였고, Object.fromEntries()를 사용해서 map Object를 Object로 변환하여 resonse에 보내니, 잘 받아오는것을 확인할 수 있었다.

1
2
3
app.get("/youtubers", (req, res) => {
  res.json(Object.fromEntries(db));
});

결과 postman get all

전체 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// express 모듈 셋팅
const express = require("express");
const app = express();

app.listen(3000);

//  데이터 세팅
const db = new Map();
var id = 1;

const youtuber1 = {
  channelTitle: "십오야",
  subscriber: 5930000,
  videoNum: 993
};
const youtuber2 = {
  channelTitle: "뜬뜬",
  subscriber: 1510000,
  videoNum: 168
};

db.set(id++, youtuber1);
db.set(id++, youtuber2);

app.use(express.json()); // http 외 모듈인 '미들웨어':json 설정

app.post("/youtubers", (req, res) => {
  const { channelTitle } = req.body;
  db.set(id++, { channelTitle, sub: 0, videoNum: 0 });
  res.send({
    message: `${db.get(id - 1).channelTitle}님, 유튜버가 되신걸 환영합니다!`
  });
});

app.get("/youtubers/:id", function (req, res) {
  const { id } = req.params;
  const youtuber = db.get(parseInt(id));
  if (!youtuber) {
    res.send("찾을 수 없는 유튜버입니다.");
  } else {
    res.send(youtuber);
  }
});

app.get("/youtubers", (req, res) => {
  res.json(Object.fromEntries(db));
});
This post is licensed under CC BY 4.0 by the author.