다음 내용은 인프런에서 공부한 내용을 복습하는 차원에서 기록한 것입니다.
출처 : https://www.inflearn.com/course/%EB%85%B8%EB%93%9C-js-%EA%B5%90%EA%B3%BC%EC%84%9C
const express = require('express')
const app = express();
app.set('port', process.env.PORT || 3000);
app.get('/', (req, res) => {
res.send('hello express123123');
});
app.post('/', (req, res) => {
res.send('hello express');
});
app.get('/about', (req, res) => {
res.send('hello express');
});
app.listen(app.get('port'), () => {
console.log('익스프레스 서버 실행');
});
const express = require('express')
const path = require('path')
const app = express();
app.set('port', process.env.PORT || 3000);
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'index.html'));
});
app.post('/', (req, res) => {
res.send('hello express');
});
app.get('/about', (req, res) => {
res.send('hello express');
});
app.listen(app.get('port'), () => {
console.log('익스프레스 서버 실행');
});
<html>
<head>
<meta charset="UTF-8" />
<title>익스프레스 서버</title>
</head>
<body>
<h1>익스프레스</h1>
<p>배워봅시다.</p>
</body>
</html>
const express = require('express')
const path = require('path')
const app = express();
app.set('port', process.env.PORT || 3000);
app.use((req, res, next) => {
console.log("모든 요청에 실행!");
next();
});
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'index.html'));
});
app.post('/', (req, res) => {
res.send('hello express');
});
// 와일드카드 처리
// app.get('/:name', (req, res) => {
// res.send(`hello ${req.params.name}`);
// });
app.get('/about', (req, res) => {
res.send('hello express');
});
app.use((req, res, next) => {
res.status(404).send("404 입니다!!");
})
// 에러처리 미들웨어
app.use((err, req, res, next) => {
console.log(err);
res.status(404).send("에러 발생!!!");
});
app.listen(app.get('port'), () => {
console.log('익스프레스 서버 실행');
});
app.use((req, res, next) => {
console.log("모든 요청에 실행!");
next();
});
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'index.html'));
});
// 에러처리 미들웨어
app.use((err, req, res, next) => {
console.log(err);
res.status(404).send("에러 발생!!!");
});
const cookieParser = require('cookie-parser');
app.use(cookieParser('password'));
app.get('/', (req, res) => {
req.cookies;
req.signedCookies;
res.cookie('name', encodeURIComponent("test"), {
expires: new Date(),
httpOnly: true,
path: '/',
});
res.clearCookie('name', encodeURIComponent(name), {
httpOnly: true,
path: '/',
});
res.sendFile(path.join(__dirname, 'index.html'));
});
app.use(express.json()); // 클라이언트에서 JSON 데이터를 받을 때 파싱
app.use(express.urlencoded({extended: true})); //form 으로 받을 때 파싱
app.use('요청경로', express.static('실제 경로'));
app.use('/', express.static(__dirname, 'public'));
const session = require('express-session');
app.use(session({
resave: false,
saveUninitialized: false,
secret: 'password',
cookie: {
httpOnly: true,
secure: false,
},
}));
app.use((req, res, next) => {
req.data = 'password123'
});
app.get('/', (req, res) => {
req.data // password123
res.sendFile(path.join(__dirname, 'index.html'));
});
app.use(morgan('dev'));
// 또는
app.use((req, res, next) => {
morgan('dev')(req, res, next);
});
app.use((req, res, next) => {
if (req.session.id) {
express.static(__dirname, 'public')(req, res, next)
} else {
next();
}
});
const multer = require('multer');
const fs = require('fs');
try {
fs.readdirSync('uploads');
} catch (error) {
console.error('uploads 폴더가 없어 uploads 폴더를 생성합니다.');
fs.mkdirSync('uploads');
}
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 },
});
app.get('/upload', (req, res) => {
res.sendFile(path.join(__dirname, 'multipart.html'));
});
app.post('/upload', upload.single('image'), (req, res) => {
// none, single, array, fields 활용해서 받는 이미지의 수 조절 가능
console.log(req.file);
res.send('ok');
});
const express = require('express');
const path = require('path');
const morgan = require('morgan');
const cookieParser = require('cookie-parser');
const session = require('express-session');
const app = express();
app.set('port', process.env.PORT || 3000);
// 보안을 위한 정적인 파일 주소를 사용할 수 있게 하는 미들웨어
app.use((req, res, next) => {
if (req.session) {
express.static(__dirname, 'public')(req, res, next)
} else {
next();
}
});
app.use(morgan('dev')); // 전송 결과를 확인하는 미들웨어
app.use(cookieParser('password')); // 헤더에 있는 쿠키 데이터를 파싱해주는 미들웨어
// 세션 쿠키에 대한 설정과 같은 세션 관리용 미들웨어
app.use(session({
resave: false,
saveUninitialized: false,
secret: 'password',
cookie: {
httpOnly: true,
},
}));
app.use(express.json()); // 클라이언트에서 JSON 데이터를 받을 때 파싱
app.use(express.urlencoded({extended: true})); // form 으로 받을 때 파싱
// 이미지나 동영상과 같은 데이터를 처리할 수 있게 해주는 미들웨어
const multer = require('multer');
const fs = require('fs');
try {
fs.readdirSync('uploads');
// 노드에서는 동기(Sync)를 사용하지 않는게 좋다고 했지만
// 서버 실행 전에 실행시켜야 할 내용들은 동기처리 하는 게 좋음
} catch (error) {
console.error('uploads 폴더가 없어 uploads 폴더를 생성합니다.');
fs.mkdirSync('uploads');
}
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 },
});
app.get('/upload', (req, res) => {
res.sendFile(path.join(__dirname, 'multipart.html'));
});
app.post('/upload', upload.single('image'), (req, res) => {
// none, single, array, fields 활용
// upload가 호출시 위에서 설정한 upload(multer 미들웨어 객체)가 실행됨
console.log(req.file);
res.send('ok');
});
// 미들웨어간 데이터 전송하기
app.use((req, res, next) => {
req.data = 'password123' // res 나 req를 활용
next()
});
app.get('/', (req, res) => {
req.data // password123
res.sendFile(path.join(__dirname, 'index.html'));
});
app.post('/', (req, res) => {
res.send('hello express');
});
//와일드카드 처리
app.get('/:name', (req, res) => {
res.send(`hello ${req.params.name}`);
});
app.get('/about', (req, res) => {
res.send('hello express');
});
app.use((req, res, next) => {
res.status(404).send("404 입니다!!");
})
// 에러처리 미들웨어
app.use((err, req, res, next) => {
console.log(err);
res.status(404).send("에러 발생!!!");
});
app.listen(app.get('port'), () => {
console.log('익스프레스 서버 실행');
});
const indexRouter = require('./routes/index');
const userRouter = require('./routes/user');
....
app.use('/', indexRouter);
app.use('/user', userRouter);
const express = require('express');
const router = express.Router();
// Get / 라우터
router.get('/', (req, res) => {
res.send('Hello, Express');
});
module.exports = router;
const express = require('express');
const router = express.Router();
// Get /user 라우터
router.get('/', (req, res) => {
res.send('Hello, User');
});
module.exports = router;
router.get('/user/:id', function(req, rse) {
console.log(req.params, req.query);
})
// 출력 결과
// { id: '123' } { limit: '5', skip: '10' }
router.get('/', function(req, res) {
res.render('index', {title: 'Express'});
});
router.get('/', function(req, res){
res.local.title = 'Express' //title이라는 변수로 선언 다른 미들웨어에서도 사용 가능
res.render('index')
});

공통되는 레이아웃을 따로 관리할 수 있어 좋음, include와도 같이 사용



