본문 바로가기
개발/node

express에서 get, post 파라미터 가져오기

by amkorousagi 2021. 3. 19.

express에서 GET Method와 POST Method에 대해 어떻게 파라미터를 가져오는지(받는지) 포스팅하겠다.

파라미터 받기

GET Method : Parameter(파라미터)로 받기

const express = require("express")

const app = express()
app.use(express.json())

app.get("/api/persons/:id", (request, response, next) => {
  const params = request.params
  const id = request.params.id
  console.log(params.id)
  response.send(id)
})

 

위 방법은 client가 보낸 request에 있는 params로 파라미터를 받는 방법이다.

"/api/persons/52"의 GET Method로 request가 들어오면 52를 콘솔 창에 출력하고, response으로 보낸다.

 

request는 json 형식으로 적혀있기 때문에, key-value 형태로 접근하면 된다.

POST Method : Body(바디)로 받기

app.post("/api/persons", (request, response)=>{
  const name = request.body.name
  const age = request.body.age
  console.log("name ",name)
  console.log("age ", age)
  
  response.send({name, age:age})
})

 

위 방법은 client가 보낸 request의 body 부분으로 파라미터를 받는 방법이다.

"/api/persons"의 POST Method로 request가 들어오면 body의 name과 age를 읽고 출력하고, 이를 json 형태로 response로 보낸다. 

 

여기서 {name, age:age}라고 되어 있는 부분은 javascript 언어의 유연함을 보여준다.

name만 쓰고 key:value 형태로 명시하지 않았지만, 자동으로 {name:name}을 쓴 것과 같은 의미를 가진다.

즉 키 값이 주어지지 않았을때 변수명을 키값으로 자동으로 사용한다는 것이다.

 

또 위 보다 더 나은 방법이 있다.

app.post("/api/persons", (request, response)=>{
  const {name, age} = request.body
  console.log("name ",name)
  console.log("age ", age)
  
  response.send({name, age:age})
})

이렇게 사용하면 각 변수마다 일일이 초기화하지 않고 한꺼번에 값을 대입할 수 있다.

여기서도 javascript의 편리함이 나타난다(javascript는 object 표현 및 처리가 편한 것 같다.)

request.body에 있는 적절한 key와 초기화할 변수 이름을 match 시켜 그 value로 초기화해준다!

 

결과는 첫 번째 방법과 같지만, 훨씬 편리하다. 

 

그 외

POST Method도 /:id를 쓸 수 있지만, 일반적으로 create를 담당하기 때문에 특정 id가 필요 없다.

보통, PUT Method는 /:id와 body 둘 다 써서 파라미터를 받는다.(기존의 특정 id의 person의 정보를 수정해야 하니까)

 

예외적으로, GET Method로는 body를 받을 수 없다.

그 이유는 특정 경로로 들어올 때의 응답의 consistency(일관성)을 유지하기 위해서이다. (GET은 resource를 읽기만 위함이므로)

(일반적으로 잘 구현된 rest api의 design 패턴 중 핵심은 응답의 일관성이다. 아래는 그에 관한 자료)

 

Best practices for REST API design - Stack Overflow Blog

Best practices on how to design REST APIs to be easy to understand, future-proof, and secure and fast.

stackoverflow.blog

 

 

댓글