Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 라우터
- MariaDB
- 리눅스
- npm
- 일반유저
- 환경변수
- 우분투
- 솔리디티
- 리액트를 다루는 기술
- 쉘스크립트
- 설치
- 벨로포터
- 시퀄라이즈
- immer
- 깃허브
- wget
- 노드
- 전역설치
- 머클루트
- node.js 교과서 따라하기
- 블록체인
- 머클트리
- wsl
- Sequelize
- 이더리움
- centos
- 변수
- 리액트
- Docker
- 자바스크립트
Archives
- Today
- Total
코드코코
210916 [6장] 6.2 자주 사용하는 미들웨어 본문
1. app_ver3.js : 미들웨어 사용
const express = require('express');
const app = express();
app.set('port', process.env.PORT || 3000);
//next : 다음 미들웨어로 넘어가는 매개변수
app.use((req, res, next) => {
console.log('모든 요청에 다 실행됩니다.');
next();
});
app.get('/', (req, res, next) => {
console.log('GET / 요청에서만 실행됩니다.');
next();
}, (req, res) => {
throw new Error('에러는 에러처리 미들웨어로 갑니다.')
});
//에러처리미들웨어 모든 변수를 사용하지 않더라도 매개변수 4개여야함.
//첫번째 매개변수 err : 에러에 관한 정보가 담겨있음.
app.use((err, req, res, next) => {
console.error(err);
//HTTP 상태코드 지정.
res.status(500).send(err.message);
});
app.listen(app.get('port'), () => {
console.log(app.get('port'), '번 포트에서 대기 중');
});
2. app_ver4.js : morgan, static, body-parser, cookie-parser, erxpress-session
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패키지는 .env파일을 읽어서 process.env로 만듦.
dotenv.config();
const app = express();
app.set('port', process.env.PORT || 3000);
//요청과 응답에 대한 정보를 콘솔에 기록
//'dev'대신 combined,common,short,tiny 등 사용.
//'dev'모드 기준으로 GET / 500 10.732 ms - 35 는 [HTTP메서드][주소][HTTP상태코드][응답속도]-[응답바이트]의미
app.use(morgan('dev'));
//static : 정적인 파일들을 제공하는 라우터 역할
//기본적으로 express에 내장되어있음
//app.use('요청경로',express.static('실제경로'));
//서버의 폴더 경로와 요청경로가 다르므로 보안에 도움됨.
//만약 요청경로에 해당하는 파일이 없으면 알아서 내부적으로 next 호출
app.use('/', express.static(path.join(__dirname, 'public')));
//body-parser : 요청의 본문에 있는 데이터를 해석해서 req.body 객체로 만들어주는 미들웨어.
//보통 폼데이터나 AJAX요청의 데이터를 처리. 단, 멀티파트(이미지,동영상,파일)데이터는 처리 못함.
//express에 내장됨. 단, raw(요청의 본문이 버퍼데이터일때)나 text 형식의 요청이 들어오는 경우 설치필요
//json형식의 데이터 전달방식
//{ name: 'coco', book: 'nodejs' }
app.use(express.json());
//주소형식으로 데이터 전달, 폼전송에서 많이 사용.
//옵션(extended)이 false인 경우 querystring 모듈 ,true인경우 qs모듈 사용하여 쿼리스트링 해석.
//name=minjoo&book=nodejs
app.use(express.urlencoded({ extended: false }));
//추가설치시 해당내용 추가
const bodyparser = require('body-parser');
app.use(bodyparser.raw());
app.use(bodyparser.text());
//cookie-parser : 요청에 동봉된 쿠키를 해석해 req.cookies객체로 만듦.
//서명된 쿠키는 req.signedcookies객체에 들어감.
//app.use(cookieParser(비밀키));
app.use(cookieParser(process.env.COOKIE_SECRET));
// //쿠키생성
// res.cookie('name', 'coco', { exprires: new Date(Date.now() + 900000), httpOnly: true, secure: true, });
// //쿠키제거
// res.clearCookie('name', 'coco', { httpOnly: true, secure: true, });
//express-session : 세션 관리용 미들웨어
//인수로 세션에대한 설정을 받음.
//세션은 사용자별로 req.session 객체 안에 유지
app.use(session({
//요청이 올 때 세션에 수정 사항이 생기지 않더라도 세션을 다시 저장할지
resave: false,
//세션에 저장할 내역이 없더라도 처음부터 세션을 생성할지
saveUninitialized: false,
//세션쿠키
//쿠키에 서명추가
secret: process.env.COOKIE_SECRET,
cookie: {
//클라이언트에서 쿠키를 확인하지 못하도록 함.
httpOnly: true,
//https가 아닌 환경에서도 사용할 수 있는지.
secure: false,
},
//세션쿠키의 이름 : 기본 이름은 connect.sid
name: 'session-cookie',
}));
// //세션등록
// req.session.name='coco';
// //세션아이디확인
// req.sessionID;
// //세션 모두 제거
// req.session.destory();
// express-session에서 서명한 쿠키 앞에는 s:붙음.
// 실제로는 encodeURIComponent 함수가 실행되어 s%3A가 됨.
// 따라서 s%3A가 붙은 경우 express-session 미들웨어에 의해 암호와 된 것으로 생각하면 됨.
app.listen(app.get('port'), () => {
console.log(app.get('port'), '번 포트에서 대기 중');
});
//app.set('port',포트) : 서버가 실행될 포트 설정.
//app.set(키,값) : 데이터 저장.
//app.get(키) : 데이터 가져오기
//app.get(주소,라우터) : 주소에 대한 get요청이 들어 올 때, 어떤 동작을 할지 적는 부분.
//app.get, app.post, app.put, app.patch , app.delete, app.options 메서드 존재.
//process.env를 별도의 파일로 관리하는 이유는 보안과 설정의 편의성 때문이다.
'기록 > node.js 교과서 따라하기' 카테고리의 다른 글
210916 [6장] 6.2 자주 사용하는 미들웨어2 (0) | 2021.09.16 |
---|---|
210916 [6장] 6.2 *미들웨어 특성 활용하기 (0) | 2021.09.16 |
210915 [6장] 6.1 익스프레스 프로젝트 시작하기 (0) | 2021.09.15 |
210915 [4장] 4.5 cluster (0) | 2021.09.15 |
210915 [4장] 4.4 https와 http2 (0) | 2021.09.15 |