Postman

airbus·2025년 2월 17일

프로그래머스

목록 보기
16/93

app.post

  • 이전까지 app.get 을 사용하여 브라우저에서 url로 요청을 보냈던 방식으로 아래와 같은 app.post코드를 실행하면 응답받는 것도 없고, 에러메시지도 나오지 않습니다.
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에서 객체를 찾아서, 그 객체의 정보를 뿌려줌

  • req : params.id <= map 에 저장된 key 값을 전달
  • res : map에서 id로 객체를 조회해서 전달

2) 유튜버 "등록" => POST /youtuber

  • req : body <= channelTitle, sub = 0, videoNum = 0 신규 유튜버 정보를 전달
  • res : "channelTitle님, 유튜버 생활을 응원합니다"

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))

postman에서 분명 url에 오타도 없는데 이상하게 오류가 나는경우, 복사 붙여넣기로 주소를 넣으면 가끔씩 값을 제대로 인식하지 못하는 현상이 있습니다. 하나하나 입력하면 정상작동합니다.

0개의 댓글