router, req, res

ClassBinu·2024년 4월 6일

Node.js 교과서

목록 보기
13/19

라우터 분리

app.get이 라우터임.
이거 자체가 get을 처리하기 위한 라우팅 메소드임.

근데 모든 엔드포인트를 다 처리하면 코드가 길어지니까,
엔드포인트 별로 별도의 라우터 객체를 연결함.

// routes.index.js
const express = require('express');
const router = express.Router();

router.get('/', (req, res) => {
  res.send('Hello, world!');
});

module.exports = router;
// 이런 식으로 연결
const indexRouter = require('./routes');
app.use('/', indexRouter);

라우터의 콜백에서 next()를 호출하면 다음 미들웨어로 넘어간다.
근데 next('route');를 호출하면 연결된 미들웨어를 생략한다.

app.route vs router.route

app.route()는 메인 인스턴스에서 직접 사용
router.route()는 express.Router()로 생성된 라우터 인스턴스에서 사용

// 메인 인스턴스
app.route('/users')
  .get(function(req, res) {
    res.send('Get a random user');
  })
  .post(function(req, res) {
    res.send('Add a user');
  });

// 라우터 인스턴스
const router = express.Router();

router.route('/users')
  .get(function(req, res) {
    res.send('Get a list of users');
  })
  .post(function(req, res) {
    res.send('Create a user');
  });

app.use('/', router);

즉 앱 라우트가 상위에 있고, 라우터 라우트로 라우팅을 모듈화해서 관리하는 구조

req & res

http 모듈의 req, res를 확장

Request (req) 객체의 주요 속성과 메서드

속성

req.params: 라우트 경로에서 지정된 파라미터 값을 포함하는 객체입니다.
req.query: 쿼리스트링 파라미터를 포함하는 객체입니다.
req.body: 클라이언트가 보낸 데이터를 포함하는 객체입니다. 이 속성을 사용하기 위해서는 body-parser와 같은 미들웨어가 필요합니다.
req.method: HTTP 요청 메소드를 나타냅니다 (예: GET, POST).
req.url 또는 req.originalUrl: 요청의 URL을 나타냅니다.
req.headers: 요청 헤더를 포함하는 객체입니다.

메서드

req.get(headerName): 지정된 요청 헤더의 값을 반환합니다.
req.is(type): 요청의 Content-Type 헤더가 지정된 타입과 일치하는지 확인합니다.

Response (res) 객체의 주요 속성과 메서드

메서드

res.send(body): 클라이언트에 응답 데이터를 보냅니다. 다양한 타입의 응답(텍스트, HTML, JSON 등)을 처리할 수 있습니다.
res.json(json): 클라이언트에 JSON 응답을 보냅니다.
res.status(code): 응답 상태 코드를 설정합니다.
res.set(header, value): 응답 헤더를 설정합니다.
res.redirect(url): 클라이언트를 다른 URL로 리다이렉트합니다.
res.render(view, [locals], callback): 템플릿 엔진을 사용하여 뷰를 렌더링하고 클라이언트에 HTML 응답을 보냅니다.

메서드 체이닝

res
	.status(201)
	.cookie('test', 'test')
	.redirect('/admin');

0개의 댓글