네트워크 (IP, 통신)

javascript api에서 res, req

Queen Julia 2024. 6. 17. 10:01
 

JavaScript의 API에서 res와 req는

 

서버와 클라이언트 간의 통신을 처리하는

HTTP 요청과 응답 객체

 

주로 Node.js와 Express.js와 같은 서버 프레임워크에서 사용됩니다.

 

req는 요청(request) 객체이고, res는 응답(response) 객체입니다.

req 객체 (Request)

req 객체는

클라이언트가 서버로 보내는 HTTP 요청

 

주요 속성과 메서드는 다음과 같습니다:

  1. req.body: 요청의 본문(body)을 포함합니다. -> 주로 POST, PUT 요청에서 사용됩니다.
  2. req.params: URL 경로의 매개변수를 포함합니다. 예를 들어, /users/:id와 같은 경로에서 req.params.id로 매개변수에 접근할 수 있습니다.
  3. req.query: URL의 쿼리 문자열을 포함합니다. 예를 들어, /search?query=abc와 같은 경로에서 req.query.query로 쿼리 매개변수에 접근할 수 있습니다.
  4. req.headers: 요청의 헤더 정보를 포함합니다.
  5. req.method: HTTP 메서드(GET, POST, PUT, DELETE 등)를 나타냅니다.
  6. req.url: 요청된 URL을 나타냅니다.

res 객체 (Response)

res 객체는 서버가 클라이언트에게 보내는 HTTP 응답에 대한 정보를 담고 있습니다. 주요 속성과 메서드는 다음과 같습니다:

  1. res.status(code): HTTP 상태 코드를 설정합니다. 예를 들어, res.status(404)는 404 상태 코드를 설정합니다.
  2. res.send(body): 응답 본문을 클라이언트로 보냅니다. 문자열, 객체, 배열 등 다양한 형태로 보낼 수 있습니다.
  3. res.json(body): JSON 형식의 응답 본문을 클라이언트로 보냅니다. res.send와 비슷하지만 JSON으로 응답을 보내는 데 특화되어 있습니다.
  4. res.redirect(url): 클라이언트를 다른 URL로 리디렉션합니다.
  5. res.set(headers): 응답 헤더를 설정합니다. 예를 들어, res.set('Content-Type', 'text/html')은 응답의 Content-Type 헤더를 text/html로 설정합니다.
  6. res.cookie(name, value, options): 쿠키를 설정합니다.

예제

아래는 Express.js를 사용한 간단한 예제 

 

클라이언트가 /user/:id 경로로

GET 요청을 보내면

 

서버는 해당 id를 사용하여

JSON 응답을 보냅니다.

const express = require('express');
const app = express();

app.get('/user/:id', (req, res) => {
    const userId = req.params.id;
    // 예시 데이터
    const user = { id: userId, name: 'John Doe' };
    
    res.status(200).json(user);
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

 

req.params.id는

클라이언트가 요청한 id 값을 가져오고,

 

res.status(200).json(user)는

클라이언트에게

상태 코드 200과

 

함께 사용자 데이터를 JSON 형식으로 응답합니다.

 

 

[다른 예시]

 

상태코드 500과, json 형식으로 메세지 / 응답값을 보낸다 .(resposne) 

 

res.status(500). json ( message:

 


GET 요청을 보낼 때 괄호 안? 

 

URL 경로와 관련된 매개변수를 통해 서버로 데이터를 전송

 


const isProductInCarts = await orderDao.isProductInCarts(userId, productId);

 

이 코드에서 괄호 안에 들어간 userId와 productId는

 

함수 isProductInCarts에 전달되는 인자(arguments)

 

 

함수 정의

const orderDao = {
    async isProductInCarts(userId, productId) {
        // 데이터베이스에서 userId와 productId를 사용하여 
        // 해당 사용자의 카트에 특정 상품이 있는지 확인하는 로직
        const query = 'SELECT COUNT(*) FROM carts WHERE user_id = ? AND product_id = ?';
        const result = await database.execute(query, [userId, productId]);
        return result[0].count > 0;
    }
};

 

 

isProductInCarts 함수userId와 productId라는 두 개의 매개변수를 받음.

-> 이 함수는, 데이터베이스 쿼리를 실행 ->  해당 사용자(userId)의 카트에 특정 상품(productId)이 있는지 확인합니다.

 

 

 

 

함수 호출

-> 'checkProductInCart' 함수를 호출 

async function checkProductInCart(userId, productId) {
    const isProductInCarts = await orderDao.isProductInCarts(userId, productId);
    if (isProductInCarts) {
        console.log('The product is in the cart.');
    } else {
        console.log('The product is not in the cart.');
    }
}

// 실제 값으로 함수 호출
checkProductInCart(1, 101);

 

  • checkProductInCart 함수 내에서 orderDao.isProductInCarts(1, 101) 호출 시, 1과 101이 각각 userId와 productId 매개변수로 전달됩니다.
  • 함수가 실행되면서, 이 값들이 함수 정의 부분의 매개변수에 할당되어 함수 내부에서 사용됩니다.
  • 비동기 처리:
    • await 키워드는 비동기 함수 호출이 완료될 때까지 기다린 후 결과를 반환
    • isProductInCarts 함수는 데이터베이스 쿼리를 비동기적으로 실행하고, 결과를 기다린 후 반환 .

 

const isProductInCarts = await orderDao.isProductInCarts(userId, productId);

에서

 

괄호 안에 들어가는 userId와 productId는

isProductInCarts 함수의 매개변수로 사용되며,

 

이 함수가 특정 사용자의 카트에 특정 상품이 있는지 확인