Node.js

라우터 객체로 라우터 분리와 req, res 객체 살펴보기

쿠와와 2020. 12. 22. 13:44

코드 :

const express = require('express');
const morgan = require('morgan');
const cookieParser = require('cookie-parser');
const session = require('express-session');
const dotenv = require('dotenv');
const path = require('path');

// 라우터를 분리하는 이유 -> 너무 많아지면 코드도 복잡해지고 가독성이 떨어짐 
dotenv.config();
const indexRouter = require('./routes');    // index
const userRouter = require('./routes/user');// user

const app = express();
app.set('port', process.env.PORT || 3000);

app.use(morgan('dev'));
app.use('/', express.static(path.join(__dirname, 'public')));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser(process.env.COOKIE_SECRET));
app.use(session({
  resave: false,
  saveUninitialized: false,
  secret: process.env.COOKIE_SECRET,
  cookie: {
    httpOnly: true,
    secure: false,
  },
  name: 'session-cookie',
}));

// 분리하기 
app.use('/', indexRouter);
app.use('/user', userRouter); // 주소가 합쳐짐 GET /user/

// 모든 라우터들 뒤에 써주면 됨 걸리는게 없어야 하니
app.use((req, res, next) => {
  res.status(404).send('Not Found');
});

app.use((err, req, res, next) => {
  console.error(err);
  res.status(500).send(err.message);
});

app.listen(app.get('port'), () => {
  console.log(app.get('port'), '번 포트에서 대기 중');
});
1. express.Router

app.js가 길어지는 것을 막을 수 있

  • userRouterget/user/가 합쳐져서 GET /user/가 됨
2. 라우트 매개변수

:id를 넣으면 req.params.id로 받을 수 있음

  • 동적으로 변하는 부분을 라우트 매개변수로 만듦

  • 일반 라우터보다 뒤에 위치해야 함

  • /users/123?limit=5&skip=10 주소 요청인 경우

3. 404 미들웨어

요청과 일치하는 라우터가 없는 경우를 대비해 404 라우터를 만들기

  • 이게 없으면 단순히 Cannot GET 주소 라는 문자열이 표시됨

 

4. 라우터 그룹화하기

주소는 같지만 메서드가 다른 코드가 있을 때

router.route로 묶음

5. req

req.app:

  • req 객체를 통해 app 객체에 접근할 수 있습니다. req.app.get('port')와 같은 식으로 사용할 수 있습니다.

req.body:

  • body-parser 미들웨어가 만드는 요청의 본문을 해석한 객체입니다.

req.cookies:

  • cookie-parser 미들웨어가 만드는 요청의 쿠키를 해석한 객체입니다.

req.ip:

  • 요청의 ip 주소가 담겨 있습니다.

req.params:

  • 라우트 매개변수에 대한 정보가 담긴 객체입니다.

req.query:

  • 쿼리스트링에 대한 정보가 담긴 객체입니다.

req.signedCookies:

  • 서명된 쿠키들은 req.cookies 대신 여기에 담겨 있습니다.

req.get(헤더 이름):

  • 헤더의 값을 가져오고 싶을 때 사용하는 메서드입니다

 

6. res

res.app:

  • req.app처럼 res 객체를 통해 app 객체에 접근할 수 있습니다.

res.cookie(, , 옵션):

  • 쿠키를 설정하는 메서드입니다.

res.clearCookie(, , 옵션):

  • 쿠키를 제거하는 메서드입니다.

res.end():

  • 데이터 없이 응답을 보냅니다.

res.json(JSON):

  • JSON 형식의 응답을 보냅니다.

res.redirect(주소):

  • 리다이렉트할 주소와 함께 응답을 보냅니다.

res.render(, 데이터):

  • 다음 절에서 다룰 템플릿 엔진을 렌더링해서 응답할 때 사용하는 메서드입니다.

res.send(데이터):

  • 데이터와 함께 응답을 보냅니다. 데이터는 문자열일 수도 있고H TML일 수도 있으며, 버퍼일 수도 있고 객체나 배열일 수도 있습니다.

res.sendFile(경로):

  • 경로에 위치한 파일을 응답합니다.

res.setHeader(헤더, ):

  • 응답의 헤더를 설정합니다.

res.status(코드):

  • 응답 시의 HTTP 상태 코드를 지정합니다.

 

 

 

 

 

 

 

 

'Node.js' 카테고리의 다른 글

시퀄라이즈 ORM와 Nodejs에 mysql 연결  (0) 2020.12.28
템플릿 엔진 사용하기  (0) 2020.12.23
미들웨어  (0) 2020.12.21
익스프레스 (express)  (0) 2020.12.18
npm 명령어들과 배포방법  (0) 2020.12.17