코드 :
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가 길어지는 것을 막을 수 있음
- userRouter의 get은 /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 |