[Express] 라우팅 메소드 app.route, app.get, app.post 이해와 활용

NodeJS 2023. 5. 13.
  • app.get
  • app.post
  • app.route

app.get('경로', 콜백);

 

 

 

app.get()

HTTP GET 요청을 보내면 처리하는 라우팅 메소드이다. 첫 번째 인자로 경로를, 두 번째 인자로 콜백 함수를 받는다.

여기서 두 번째 인자인 콜백 함수는 미들웨어(middleware) 라고도 한다.

예시에 있는 next() 함수에 인자를 전달하면 에러 처리 미들웨어로 제어가 이동하여 에러 처리 로직을 수행할 수 있다.

여기서 말하는 에러 처리 미들웨어란, 라우팅 메소드 작성이 끝나는 부분에 app.use를 활용하여 에러 처리 하는 코드를 말 한다.

 

더보기: CRUD에 대해 이해하기

더보기

// CRUD: 생성(Create), 읽기(Read), 업데이트(Update), 삭제(Delete)의 약자

 

1. 생성(Create): 새로운 데이터를 생성하거나 데이터베이스에 추가하는 작업을 말한다. HTTP 메소드 - POST

2. 읽기(Read): 데이터베이스에서 데이터를 조회하거나 읽는 작업을 말한다. HTTP 메소드 - GET

3. 수정(Update): 이미 데이터베이스에 있는 데이터를 수정하는 작업을 말한다. HTTP 메소드 - PUT

4. 삭제(Delete): 데이터베이스에서 특정 데이터를 삭제하는 작업을 말한다. HTTP 메소드 - DELETE

 

---추가---

수정(Update)은 PUT 말고도 PATCH가 있는데 다음은 둘의 비교이다.

 

PUT: 리소스 전체를 업데이트하는 데 사용된다. 특정 부분만 업데이트되는 것이 아닌 나머지 정보는 모두 없어지거나 기본값으로 대체될 수 있다.

PATCH: 리소스 일부를 업데이트하는 데 사용된다. 클라이언트는 변경하려는 필드만 제공하면 된다. 나머지 정보는 그대로 유지된다.

 

const express = require('express');
const router = express.Router();

// 가상의 데이터
const tweets = [{id: "east0321", text: "sayHello"}];

// ':'를 활용한 동적 경로(dynamic path) 
router.get('/:id', (req, res, next) => {
    try {
        const id = req.params.id;
        const data = tweets.filter((i) => i.id === id);
        if (data.length === 0) {
            const error = new error;
            error.statusCode = 404;
            throw error;
        } else {
            res.json(data);  // json을 사용하면 자동으로 JSON문자열로 변환하여 응답하며, 
        }                    // Content-Type도 자동으로 설정해준다.
    } 
    catch {
            res.send('트윗이 존재하지 않습니다.');
        }
    });

 


 

app.post('경로', 콜백)

 

 

 

app.post()

HTTP에서 POST 요청을 보내오면 처리하는 메소드이다. 주로 클라이언트로부터 데이터를 받아 서버에 저장하는 데 사용된다.

 

const tweets = [];

router.post('/', (req, res, next) => {
    const data = req.body;  // 클라이언body에 담겨온 데이터를 변수 data에 담는다
    tweets.push(data);  // data를 tweets 배열에 추가
    res.status(201).json(tweets);  // 상태코드 201을 설정하고, json으로 직렬화 하여 응답을 보냄
    console.log('추가완료~!');  // 성공적으로 완료되면 콘솔에 '추가완료~!'를 표시
})

 

 


 

 

app.route('경로');

 

 

 

app.route()

특정 경로에 대한 체인이 가능한 라우트 핸들러를 만든다. 같은 경로에 대해 여러 HTTP 메소드를 처리할 때 유용하다.

route('경로') 작성 후 아래 .get .post 등으로 체이닝을 한다. 

 

app.route('/users')
    .get((req, res) => {
        res.send('GET request to the /users page');  // GET에 대한 미들웨어
    })  // ⛔️주의 포인트⛔️: 세미클론 사용❌
    .post((req, res) => {
		const body = req.body;
		tweets.push(body);
		res.status(201).json(tweets);  // POST에 대한 미들웨어
    	console.log('추가완료~!');
		})
    });