app.post('/youtuber', (req, res) => {
res.send("Test")
)}
===>
???
POST는 등록, 생성을 요청하는 기능으로, 예를 들어 회원가입(등록)시 name, id, pw, address같은 개인정보 포함하는데, 이런 정보를 GET 메소드 처럼 URL로 데이터를 전달해서는 안됩니다. => body 에 숨겨서 보냅니다.
API가 POST로 요청한다는 건 body라는 공간에서 보내진다는 것
웹 브라우저에서는 url로만 전달이 되기에, 'Postman API Platform'을 사용해서 테스트 할 수 있습니다.
GET으로 저번에 만든 유튜버의 id값에 맞는 데이터를 불러오는 것도 확인 가능합니다.
이번에는 VSC에
app.post('/test', function (req, res) {
console.log(req.body,message)
)}
를 적은다음
postman에서 request부분에서 body탭에서 raw형식을 선택하고 json형태로 다음내용을 작성하고
{
"message" : "POST !"
}
POST | localhost:1234/test로 보내보면 'undefined'가 뜨는데
body에서 가져올 때는 추가로 세팅을 해줘야 합니다.
express에서 http 모듈 외에도 다른 모듈(미들웨어)를 사용할 것이기 때문에
app.use(express.json)을 사용하면 request로 날아오는 body 값을 json으로 읽을 수 있습니다.
다음과 같이 미들웨어를 추가하고 다시POST | localhost:1234/test로 보내면(send) VCS 터미널에서 POST! 라는 메시지를 확인할 수 있습니다.
app.use(express.json())
app.post('/test', function(req, res) {
console.log(req.body.message)
추가로
app.use(express.json())
app.post('/test', function(req, res) {
console.log(req.body.message)
res.send(req.body.message)
})
를 작성하면 postman의 response body영역에 돌려줄 수 있습니다.
<API 설계 (URL, method)>
1) GET /youtuber/:id 에서 id로 map에서 객체를 찾아서, 그 객체의 정보를 뿌려줌
2) 유튜버 "등록" => POST /youtuber
postman에서 POST 온 것을 Map(db)에 저장(PUT) 해주어야 함
db.set(1, youtuber1)
db.set(2, youtuber2)
db.set(3, youtuber3)
에 새로운 4번째 유튜버를 등록
db.set(4, res.body)
postman에서 위에서 한것처럼 json 형식으로
{
"channelTitle" : "다싶고가 집",
"sub" : 0,
"videoNum" : 0
}
POST 하면 GET으로 localhost1234/youtuber/4 요청시 4번째 유튜버의 정보들이 저장된 것을 확인이 가능합니다.
~
db.set(4, req.body)
res.json ({
message : `${db.get(4).channelTitle}님, 유튜버 생활을 응원합니다.`
})
위의 내용을 추가하여 메시지를 전달하여 완료합니다.
추가로 다른 유튜버들을 추가하는 경우에는?
4번을 추가했을 때 처럼 5번째 유튜버를 추가하면 추가가 되지만 4번 유튜버의 정보에 덮어씌우기가 되어버립니다.
let db = new Map()
let id = 1
db.set(id, youtuber1)
db.set(id, youtuber2)
db.set(id, youtuber3)
~
~
~
db.set(4, req.body)
를 다음과 같이 수정하고
let db = new Map()
let id = 1
//후위증가
db.set(id++, youtuber1)
db.set(id++, youtuber2)
db.set(id++, youtuber3)
~
~
~
db.set(id++, req.body)
res.json ({
message : `${db.get(id-1).channelTitle}님, 유튜버 생활을 응원합니다.`
})
??? 그래도 제대로 추가가 안되는 상황
id가 블록스코프인 let으로 변수가 선언되어있습니다. 중괄호 밖에 있어서 적용이 안됨.// 이런이유로 var가 아직까지 사용되는 중
var id = 1로 수정합니다.
메시지 부분에서는 db.get(id-1)인 이유는 id값이 후위증가하여 +1 이 된 값이기에 id-1로 값을 맞춰줍니다.
app.get('/youtubers', function (req, res) {
res.json(Object.fromEntries(db))