가자미의 개발이야기
[Node.js] 자주 사용하는 미들웨어(모듈) 본문
1. dotenv
.env 파일을 읽어서 process.env로 만듦
키=값 형식으로 구성
비밀 키를 소스코드와 분리하기 위함
2. morgan
서버로 들어온 요청과 응답을 기록해주는 미들웨어
개발환경에서는 'dev', 배포 환경에서는 'combined'를 애용
app.use(morgan('dev'));
3. static
정적인 파일들을 제공하는 미들웨어
인수로 정적 파일의 경로를 제공
파일이 있을 때 fs.readfile로 읽어들일 필요가 없음
요청하는 파일이 없을 경우 next를 호출해 알아서 다음 미들웨어로 넘어감.
파일을 발견했다면 다음 미들웨어는 실행되지 않음
컨텐츠 요청 주소와 실제 컨텐츠의 경로를 다르게 만들 수 있음.
app.use('요청 경로', express.static('실제 경로'));
4. body-parser
요청의 본문을 해석해주는 미들웨어
폼 데이터나 ajax 요청의 데이터 처리
json 미들웨어는 요청 본문이 json인 경우 해석, urlendcoded 미들웨어는 폼 요청 해석
put이나 patch, post 요청 시에 req.body에 프런트에서 온 데이터를 넣어줌
app.use(express.json());
app.use(express.urlencoded({exteded:false}));
버퍼 데이터나 text 데이터일 때는 body-parser를 직접 설치해야 함
const bodyParser = require('body-parser');
app.use(bodyParser.raw());
app.use(bodyParser.text());
5. cookie-parser
요청 헤더의 쿠키를 해석해주는 미들웨이
req.cookies 안에 쿠키들이 들어있음.
비밀 키로 쿠키 뒤에 서명을 붙여 내 서버가 만든 쿠키임을 검증
app.use(cookieParser(비밀키));
실제 쿠키 옵션들을 넣을 수 있음
expires, domain, httpOnly, maxAge, path, secure, sameSite 등
지울 때는 clearCookie로(expire와 maxAge를 제외한 옵션들이 일치해야.)
res.cookie('name', 'gazami',{
expires: new Date(Date.now() + 900000),
httpOnly: true,
secure: true,
});
res.clearCookie('name', 'gazami',{httpOnly:true, secure: true});
6. express-session
세션 관리용 미들웨어
세션 쿠키에 대한 설정(secret: 쿠키 암호화, cookie: 세션 쿠키 옵션)
세션 쿠키는 앞에 s%3A가 붙은 후 암호화되어 프론트에 전송.
app.use(session({
resave: false,
saveUninitialized: false,
secret: process.env.COOKIE_SECRET,
cookie: {
httpOnly: true,
secure: false,
},
name: 'session-cookie',
}));
req.session.name='gazami';//세션등록
req.seesionID;//세션아이디 확인
req.session.destroy();//세션 모두 제거
resave : 요청이 왔을 때 세션에 수정사항이 생기지 않아도 다시 저장할지 여부
saveUninitialized : 세션에 저장할 내역이 없더라도 세션에 저장할 지
req.session.save로 수동 저장도 가능(별로 사용x)
7. multer
멀티파트 데이터 형식을 해석
const multer = require('multer');
const upload = multer({
storage: multer.diskStorage({
destination(req,file, done) {
done(null, 'uploads/');
},
filename(req, file, done) {
const ext = path.extname(file.originalname);
done(null, path.basename(file.originalname, ext) + Date.now() + ext);
},
}),
limits: {fileSize : 5 * 1024 * 1024},
});
storage : 저장공간 확보
diskStorage : 하드디스크에 업로드 파일 저장
destination : 저장할 경로
filename : 저장할 파일명(파일명+날짜+확장자 형식)
Limits 파일개수나 파일 사이즈 제한
실제 서버 운영시 서버 디스크 대신 S3같은 스토리지 서비스에 저장(storage 옵션 변경)
app.post('/upload', upload.single('image'), (req,res)=>{
console.log(req.file, req.body);
res.send('ok');
});
app.post('/upload', upload.none(), (req, res)=>{
console.log(req.body);
res.send('ok');
});
single : 하나의 파일 업로드
none : 파일 업로드 하지 않음
array : 하나의 요청 body 이름 아래 여러 파일 업로드
fileds : 여러 개의 요청 body 이름 아래 파일이 하나씩
(array, fileds 모두 업로드 된 이미지 정보가 req.files 아래에 존재)
'HTML & CSS & JS > Node.js' 카테고리의 다른 글
[Node.js] 미들웨어 (0) | 2021.05.11 |
---|---|
[Node.js] express를 활용한 웹 개발 (0) | 2021.05.11 |
[Node.js] 이벤트 리스너를 추가한 간단한 웹서버 구현 (0) | 2021.03.17 |
[Node.js] Node.js에서 웹 서버 만들기 (0) | 2021.03.11 |
[Node.js] 자주 쓰이는 npm 명령어 (0) | 2021.03.11 |