14. express - GET, POST, DELETE, PUT

JSLEE·2024년 4월 30일

Postman을 이용해 HTTP request method(GET, POST, DELETE, PUT) 을 날리고,
express를 이용하여 이 요청을 처리하고 respond 해보도록 한다.

// express 세팅
const express = require("express")
const app = express()
app.listen(3000)

하단의 코드에서 사용되는 req는 request를 의미하고,
Postman(클라이언트) -> express(서버) 로 날리는 메시지를 의미한다.

res는 respond를 의미하고,
express(서버) -> Postman(클라이언트) 로 날리는 메시지를 의미한다.


GET - 조회

지금까지 공부한 내용으론,
GET메소드는 request를 작성할 수 있는 방법이 3가지 존재한다.
1. URL만 request
2. URL + 쿼리스트링 ( /?name=kim&grade=A )
3. URL + 라우트 파라미터 ( /:id )

1) URL만 request 받는 경우.

app.get('/',(req, res)=>{
  res.send(" respond에서 데이터들을 뿌려주면 됨")
})

이 경우는 사용자가 메인홈페이지에 접속했을 때 주로 발생하는 경우다.
우리가 네이버나 다음 등의 홈페이지에 접속했을 때, 부가적인 request 없이 URL만 사용해서 홈페이지에 대한 정보를 받는 경우다.

2) URL + 쿼리스트링 ( /?name=kim&grade=A )

app.get('/',(req, res)=>{
  res.json(req.query)
})

사용자가 웹페이지에 구성된 특정 버튼이나, URL을 이용하여 추가적인 request를 전송한다. 서버측에서는 req.query 를 통해 URL에 포함된 쿼리스트링을 json 형태로 받아올 수 있다.
위의 경우처럼, Postman에서 /?name=kim&grade=A 라고 URL을 request하면
req.query의 값은 { "name" : "kim" , "grade" : "A" } 가 될 것이다.

3) URL + 라우트 파라미터 ( /:id/:name )

app.get('/:id/:name',(req, res)=>{
  
  res.json(req.params)
})

이 경우 또한, URL에 변수를 포함시켜, 해당 변수를 이용하여 respond할 수 있다.
서버측에서는 req.params를 통해 URL에 포함된 id와 name을 json형태로 받아올 수 있다.
Postman에서 /1/lee 이라고 URL을 request하면,
req.params의 값은 { "id" : "1" , "name" : "lee" } 가 될 것이다.
이때, 주의해야할 점은 숫자를 입력해도 문자열 형태로 값이 들어온다.
따라서 현재 "id"의 value값은 "1"이라는 string이다.

서버측에서 해당 값을 숫자로 바꾸어서 처리하고 싶다면, parseInt()Number()등의 함수를 이용해서 변환해주어야한다.


POST - 등록

app.use(express.json()) // body의 json 형식 요청을 파싱하기 위해 필요
let myData = new Map()
app.post('/',(req, res)=>{
  myData.set(1, req.body)
  res.send('등록 완료')
})

POST는 서버의 데이터에 클라이언트가 요청한 값을 추가하고자 할 때 이용된다.
따라서, 클라이언트(Postman)은 body에 추가하고자 하는 데이터 값을 포함해서 보내야한다. (Postman의 body에 데이터를 담는 방법)
서버(express)에서는 app.post()에서 req.body 를 이용해 request의 body부분의 값들을 얻을 수 있다. 서버의 데이터에 body 값을 등록하는 코드를 추가하고, 클라이언트에게 보여주길 원하는 정보를 respond해주면 된다.


DELETE - 삭제

app.delete('/:id',(req, res)=>{
  let {id} = req.params
  id = parseInt(id)
  myData.delete(id)

})

DELETE는 서버의 데이터에 클라이언트가 요청한 값을 삭제할 때 이용된다.
GET에서 봤었던 라우트파라미터(/:id) 형식을 통해서 예시코드를 작성했다.
DELETE의 경우도, 요청을 받은 후에 서버에서 데이터를 처리하고, 원하는 respond를 보내주면 된다.
예시코드에서는 post에서 myData.set(1, req.body)를 했었기 때문에, id가 1인경우 데이터값의 삭제를 수행할 수 있다.


PUT - 수정

app.put('/:id',(req, res)=>{
  let {id} = req.params
  id = parseInt(id)
  let newData = req.body
  myData.set(id, newdata)
  
  res.send("수정이 완료되었습니다.")

})

PUT 메소드에는 어떤 key를 어떤 value로 수정할지에 대한 정보가 필요하다.
이 말인즉슨, Postman에서 body를 작성해줘야 한다는 의미이다.
위의 예시코드에서는, id를 통해 myData에서 해당 key를 가지고 있는 데이터의 value를, request 받은 body의 값으로 바꾸었다.


각 메소드를 구현할 때, 발생하는 상황은 다양하다.
예를 들어서, DELETE를 통해 특정 데이터를 삭제하는 요청을 받았는데, 해당 데이터가 없다면 없는 데이터를 삭제할 순 없으므로 오류가 발생할 것이다. 이렇게 오류가 발생할 수 있는 부분들에 if문을 통하여 해당 상황에서 어떻게 동작해야할지 잘 고려해야 한다.

profile
공부한 내용들을 정리하기 위해 사용하는 블로그입니다.

0개의 댓글