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
// }