req.query, req.params, req.body 차이점

henry·2024년 11월 5일

Node.js와 Express에서 클라이언트 요청 데이터를 주로 세 가지 방식으로 데이터를 받음

  1. req.query
  2. req.params
  3. req.body

🚩 1. req.query

  • URL 쿼리 스트링을 통해 전달된 데이터

요청 예시

GET /products?category=electronics&sort=price&order=desc
app.get('/products', (req, res) => {
   const category = req.query.category; // 'electronics'
   const sort = req.query.sort;         // 'price'
   const order = req.query.order;       // 'desc'
   
   // category, sort, order를 사용하여 데이터 조회 로직 수행
   res.send(`Category: ${category}, Sort by: ${sort}, Order: ${order}`);
});

특징

  • URL에 포함된 쿼리 파라미터가 req.query에 객체 형태로 전달
  • 보안이 필요한 데이터는 req.query로 보내지 않는 것이 좋음.

🚩 2. req.params

  • URL 경로에 포함된 값

요청 예시

GET /products/12345
GET /users/67890/orders

코드 예시

예시 1

// 동적 라우팅 설정
app.get('/products/:productId', (req, res) => {
   const productId = req.params.productId; // '12345'
   
   // productId를 사용하여 특정 상품 데이터 조회 로직 수행
   res.send(`Product ID: ${productId}`);
});

예시 2

app.get('/users/:userId/orders', (req, res) => {
   const userId = req.params.userId; // '67890'
   
   // userId를 사용하여 해당 사용자의 주문 목록 조회
   res.send(`User ID: ${userId}`);
});

특징

  • URL의 경로 일부를 동적으로 사용해서 req.params로 접근

🚩 3. req.body

  • POST, PUT, PATCH 요청으로 전송된 데이터
  • 클라이언트가 서버로 데이터를 전송할 때 사용
  • 주로 폼 데이터나 JSON 데이터 형태로 전송

요청 예시

POST /products
Content-Type: application/json

{
   "title": "New Product",
   "description": "Product description",
   "price": 100
}

코드 예시

app.post('/products', (req, res) => {
   const title = req.body.title;           // 'New Product'
   const description = req.body.description; // 'Product description'
   const price = req.body.price;           // 100
   
   // title, description, price를 사용하여 새로운 상품 생성 로직 수행
   res.send(`Product created: ${title}, ${description}, $${price}`);
});

특징

  • POST, PUT, PATCH 요청에서 전송된 데이터가 req.body에 포함
  • req.body는 JSON이나 URL 인코딩 형식으로 전송된 데이터를 받기 위한 미들웨어 필요(express.json())

🚩 비교

방식데이터 전달예시 요청접근 예시
req.queryURL 쿼리 스트링/products?category=electronicsreq.query.category
req.paramsURL 경로의 동적 값/products/12345req.params.productId
req.bodyPOST, PUT 등의 요청 본문{"name":"Product","price": 100}req.body.title

0개의 댓글