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');
const multer = require('multer');
const fs = require('fs');
dotenv.config();
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',
})
);
// 서버 시작전에 uploads 폴더가 있는지 찾고, 없으면 만든다
try {
fs.readdirSync('uploads');
} catch (error) {
console.error('uploads 폴더가 없어 uploads 폴더를 생성합니다.');
fs.mkdirSync('uploads');
}
const upload = multer({
storage: multer.diskStorage({
destination(req, file, done) {
// done(에러 처리, 저장할 곳)
done(null, 'uploads/'); // 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 }, // 5MB
});
app.get('/upload', (req, res) => {
res.sendFile(path.join(__dirname, 'multer.html'));
});
// upload.single() 파일 하나만을 처리하는 미들웨어 함수
// <input type="file" name="image" /> name="image"
app.post('/upload', upload.single('image'), (req, res) => {
console.log('req.file>>', req.file);
res.send('ok');
});
app.get(
'/',
(req, res, next) => {
console.log('GET / 요청에서만 실행됩니다.');
next();
},
(req, res) => {
throw new Error('에러는 에러 처리 미들웨어로 갑니다.');
}
);
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'), '번 포트에서 대기 중');
});
// req.file>> {
// fieldname: 'image',
// originalname: '1123.png',
// encoding: '7bit',
// mimetype: 'image/png',
// destination: 'uploads/',
// filename: '11231680412337468.png',
// path: 'uploads/11231680412337468.png',
// size: 102443
// }